陣列,指標陣列,陣列指標的學習理解

2021-06-26 06:07:48 字數 2591 閱讀 6351

本文將以如下定義的陣列及指標為例,對陣列,指標陣列,陣列指標進行說明。這是看完書後總結的,所謂好記性,不然爛部落格,想將這些總結記下,以便需要時進行重溫。如有理解上的錯誤,望大家指出。

int a[3][3]=,,};

int (*p0)[3];

int *p1[4];

int **p3;

int *p4;

1、二維陣列

a、二維陣列名 a 是乙個二級位址(平面位址),其每次加1,對應的位址加「總列數 * 每一元素佔的位數」,即指向下一行的首位址。具體理解看程式:

p4=&a[0][0];//p4=*a//p4=a[0]  //此3種方法對p4賦值,效果一樣

2、指標陣列

一維指標陣列名p1是指標陣列的首位址,是乙個二級位址。可以將其賦給乙個二級指標,如 「

p3=p1;

」 。p1[i]是一級位址。此外,p1=a[0]、p1=a 這些試圖對p1進行賦值的語句都是錯的,因為p1是陣列名(就像int a[10]中的a一樣),代表乙個位址,而不是變數,所以不能進行賦值。這跟陣列指標變數不一樣,陣列指標歸根到底還是變數,所以可以進行賦值操作。

結合程式理解:

for(int x=0;x<3;x++)

p1[x]=a[x];

printf("指標陣列\n");

printf("a:%d\n",a);

printf("a[1]:%d\n",a[1]);

printf("\n");

printf("p1:%d\n",p1);

printf("p1+1:%d\n",p1+1);//執行結果表明,p1+1等於&p1[1]

3、陣列指標

陣列指標變數p0是乙個二級指標,但不能將其賦給另乙個定義的二級指標。如,「p3=p0;」是不合法的。具體理解結合程式:

注意:二維陣列中,陣列名 a 代表陣列的起始位址。a+1與a[1]都是位址,二者的值相同。但 a+1 表示第1行的起始位址,是乙個二級位址,a[1]表示第1行0列元素的位址,是乙個一級位址,二者意義不一樣。

陣列指標與指標陣列的理解

在進行閱讀yolo原始碼的時候,由於其都是用c寫的,在指標方面,遇到了很多問題,現在就問題,對c進行更深的理解。1.c當中的strcpy與strcat函式的區別 字串處理strcpy,strcat函式的用法 1 strcat是用來連線兩個字串的,原型是char strcat char dest,ch...

指標陣列與陣列指標的理解

指標陣列與陣列指標是十分繞口的,也不容易記憶,想要知道它是什麼?就看它後面是什麼詞!指標陣列 指標陣列後面的詞就是陣列,所以它就是陣列,而陣列裡面放的是指向這個型別的指標 陣列指標 陣列指標後面的詞是指標,則它就是個指標。在知道指標陣列和陣列指標字面的意思之後,我們就要解決遇到的表示式是指標陣列還是...

指標, 指標的指標, 陣列, 指標陣列, 陣列指標

指標 int a 10 int p a 指標的指標 int b 20 int p b int p2p p 簡單陣列 int c 10 整數陣列,含有10個整數元素 也就是說每乙個元素都是整數 指標陣列 int p 10 指標陣列,含有10個指標元素 也就是說每乙個元素都是指標 陣列指標 int p ...