C語言隨筆4 指標陣列 陣列指標

2022-06-18 15:00:20 字數 1167 閱讀 8615

陣列:

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...