6.26.Göstəricilər və massivlər Massivin adı massivdə göstərici-sabit kimi ifadə edilir. Tutaq ki, proqramda
int x[10];
-massivi elan olunmuşdur. Bu halda x-komputerin yaddaşında massivin 0-cı elementinə olan göstərici olur.
Ona görə də aşağıdakı münasibət doğrudur:
x=&x[0]; Buradan alınır ki, indeksin köməyi ilə massivin elementinə müraciətdən əlavə olaraq göstəricilərdən də istifadə etməklə aşağıdaki qaydada müraciət etmək olar:
massivin adı[indeks]-bu yazılışa
*(massivin adı+indeks)-yazılışı ekvivalentdir
Məsələ, yuxarıda təsvir edilən x-massivinin elementlərinə aşağıdaki kimi müraciət etmək olar:
x[5] və ya *(x+5) və ya *(5+x). Göstəricilər toplama əməlini öz qaydalarına uyğun olaraq yerinə yetirirlər. x-göstəricisi tam tipə malikdir. x+5 əməli ünvanı 10 vahid artırır.
Dəyişənlərdən aydın olur ki, niyə massivin birinci elementinin indeksi sıfra bərabərdir. Birinci elementin ünvanı massivin ünvanı ilə üst-üstə düşür:
x[0]==*(x+0); Massivin adı göstərici-sabit olduğuna görə onu proqramda dəyişmək olmaz, yəni başqa bir element mənimsətmək olmaz. Məsələ, tutaq ki, strukturu eyni olan iki massiv təsvir edilmişdir:
int x[10], y[10];
x=y; - mənimsətmə operatoru səhv olar. Bu yazılış Pascal dilində doğrudur (massivin birinin elementləri digərinə mənimsədilir). C++ dilində isə bir massivin elementlərini digər massivə mənimsətmək üçün göstərilən yazlışdan istifadə etmək olmaz. Bu halda massivin elementləri digər massivə element-element mənimsədilir.
İndi iki ölçülü massivə baxaq:
int P[5][10]; Bu massiv 5-sətirdən və hər sətirdə 10 elementdən ibarətdir. İki ölçülü massiv yaddaşda sətirlərlə yeerləşir. Yuxarıda göstərildiyi kimi P göstərici-sabitdir və P-massivin ünvanını müəyyən edir. Yəni p[0][0]-ın ünvanı göstərir.
İndekslə göstərilən p[i]-adı massivin 2-ci sətrini göstərir. Göstəricidən istifadə edərək p[i]-adına aşağıdaki kimi müraciət etmək olar:
*(P+i*10); P[2][4] elementinə müraciəti *(P+2*10+4) kimi yazmaq olar. Ümümi halda aşağıdakilar ekvivalentdir:
P[i][j] və *(P+i*10+j). Axırıncı ifadəni sətrin uzunluğunu göstərmədən iki mötərizədən istifadə etməklə aşağıdaki kimi də yazmaq olar:
*(*(P+i)+j). Oxşar qaydada A[i][j][k]-üç ölçülü massivinin elemetlərinə aşağıdaki qaydada müraciət etmək olar:
*(*(*(A+i)+j)+k), və s.