C語言指標陣列和陣列指標

2021-09-19 07:49:35 字數 2208 閱讀 7496

一、指標陣列

1.指標陣列就是陣列元素是指標型別的陣列.

可以看出,這些位址都是連續的,因為是int型陣列,所以每個位址相差4個位元組。

2.指標也可以進行加減運算,但指標的加減不是數值上的加減,它表示加或減該指標指向的資料型別的位元組數,比如:

3.二維指標陣列

可以看出,二維陣列的記憶體分配也是連續的。

#include#includeint main()

; int i,j;

p=&a[0][0];//取二維陣列的首位址

二、陣列指標:乙個直指向陣列的指標。

int (*p)[3]=null;//表示乙個指向有三個元素的int型陣列的指標
#include#includeint main()

; int (*p)[3];//定義陣列指標

int i,j;

p=a;//把a的首位址賦給p

為了更好的理解有如下**:

#include#includeint main()

; for(i=0;i<3;i++)

printf("\n");

}printf("a:%d a+1:%d a+2:%d\n",a,a+1,a+2);//每行的首位址

printf("*a:%d *(a+1):%d *(a+2):%d\n",*a,*(a+1),*(a+2));//每行首元素的位址

printf("*a+1:%d *(a+1)+1:%d\n",*a+1,*(a+1)+1);//行位址加1和元素位址加1不同

printf("**a:%d *(*(a+1)):%d *(*a+1):%d\n",**a,*(*(a+1)+1),*(*a+1));//輸出元素的值,通過兩次解引用

對於以上可以總結出,對於二維陣列名可以理解為指向指標的指標,計算機在處理二維陣列時是以一維陣列為基本單位來處理,可以理解為計算機不能直接看到陣列的某個元素,它只知道這個二維陣列有幾個一維陣列組成,即上面的陣列名a表示第一行的行位址,所以行位址和某行陣列元素的首位址雖然數值上相同但意義完全不同。

int a[3][3];

int (*p)[3];

p=a;//a表示行位址,所以可以這樣賦值

p=&a//錯誤的賦值,&a表示陣列整體的位址,與一維陣列指標不相容就會報錯

int a[3];

int (*p)[3];

p=&a;//&a表示一維陣列整體的位址可以賦給一維陣列指標

p=a;//賦值錯誤,此時a表示首元素的位址,與一維陣列指標相容,會報錯

以上就是我對陣列指標和指標陣列的一些看法。

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...