陣列:
1:陣列名為位址,表達方法:
int a[10];
a;//陣列名表示首位址
&a;//陣列名加取位址符,仍然表示首位址
&a[0];//第0個元素的位址,即首位址
陣列名是指標常量,值不可變,不占用記憶體空間
2:指標陣列(每個元素都是指標
指標陣列:double *a[10];
每個元素佔4/8個位元組;
3:陣列指標:int (*p2)[5];
指向陣列的指標,在多維陣列使用,占用記憶體空間
p2指向 5個int的陣列
p2+1:位址增加5個int變數的長度
指向二維陣列的每行首位址.
注:(*p)的括號不可省略,[ ]的優先順序高於*,若不加括號就是指標陣列了。
初始化辦法:int a[2][3];
int (*p)[3] = a;
a將首位址給過去,3定義偏移量
a[i][j] //直接訪問
==*(*(a+i)+j) //取內容符,通過陣列名訪問
==p[i][j]
==*(*(p+i)+j) //通過陣列指標訪問
a 二維陣列
*(a+i) 等價於 a[i] // 直接訪問成員
a[i] 表示第i行的所有資料 ,資料長度為3*4=12byte
*(a+i)+j 表示第i行第j個元素的位址
*(*(a+i)+j) 取內容訪問該元素
部落格:*(a+1)單獨使用時表示的是第 1 行資料,放在表示式中會被轉換為第 1 行資料的首位址(有第0行)
編譯器遇到這種情況都會轉換為指向該行第 0 個元素的指標
*(*(a+1)+1)表示第 1 行第 1 個元素的值。很明顯,增加乙個 * 表示取位址上的資料。
原書:因為;
*(a+i) 等價於 a[i] //取內容符:
二維陣列的內容是一維陣列
一維陣列的名字是行的首位址
所以*(*(a+i)+j) 等價於*(a[i]+j) //
a[i] 是第i行首位址
*(a[i]+j) 等價於(a[i])[j]
在取內容符中 j 對應一維陣列
偏移量j個int
二維陣列的首位址 a == a[0] == &a[0][0]
C語言總結 4 指標和陣列
指標就是指標,指標變數在 32 位系統下,永遠佔 4 個 byte,其值為某乙個記憶體的位址。指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別和個數。陣列可以存任何型別的資料,但不能存函式。c 中的引用 1...
指標(2)指標陣列 陣列指標 陣列指標陣列
都說指標是c語言的精華所在。今天繼續對指標的探索!指標下一 指標陣列 陣列指標 指標陣列 是存放指標的陣列。如 int p 5 該陣列長度為5,存放的是指向整型變數的指標。陣列指標 是乙個指向陣列的指標。如 int p 5 這是乙個指向長度為5的整型陣列的指標。1.陣列指標在一維陣列中的應用 int...
初學C語言2 5 指標陣列和陣列指標
區別 指標變數是乙個左值 可改變 左值lvalue 識別或定位乙個儲存位置的識別符號。左值必須是可改變的 陣列名是乙個位址常量 不可改變 舉例 使用指標呼叫陣列 計算字串長度 include include include pragma warning disable 4996 int main p...