1 #include23int main(void)4
;6int *p = (int*)(&a + 1
);7 printf("
%d,%d\n
",*a+1,*(p-1
));8
9 // int (*ptr1)[5] = &a; √
10 // int (*ptr2)[5] =a; ×
11 // int (*ptr1)[3] = &a; ×
12 // int (*ptr2)[3] =a; ×13}
1415
//2,5
陣列名只可以作為右值!
當我們定義乙個陣列時候,編譯器根據指定的元素個數和型別確定分配記憶體大小。並把這一塊位址的名稱賦為陣列名稱。
a[0]、a[1]......為陣列元素,但並非元素名稱!
指標,32系統總是為4位元組(0x11111111)只能存放乙個位址單元的值,所以總是存放的首位址。
但是訪問時候需要根據型別大小來移動指標。
陣列名:值等同於陣列「首元素」的「首位址」(陣列首元素的指標)
p + 1
char*移動乙個位元組,int*移動4個位元組!陣列指標移動乙個陣列元素型別長度!二級指標移動乙個指標長度(4)!
&a:表示陣列指標(取陣列變數a的指標)
對陣列的訪問,總是轉換為對指標的訪問!
1int b[2][2] = ,};2//
int *p2 = b; ×3//
int (*p5)[2] = b; √4//
int **p = b; ×
二維陣列名稱,指向首元素b[0]的指標,為陣列指標【一級指標】!
1//int *p3 = b[0]; √2//
int (*p4)[2][2] = &b; √
二維陣列所有元素的訪問(一級指標):
1 #include2intmain()
3,};
5int *parray =null;
67 parray = (int*)iarray;89
10 printf("
array[0][0] = %d\n
", *parray);
11 printf("
array[1][2] = %d\n
", *(parray + 5
));12 printf("
array[1][2] = %d\n
", *(parray + 1 * 3 + 2)); /*
陣列本身在位址空間中就是連續排列的
*/13 printf("
array[1][2] = %d\n
", *((int *)(*((int (*)[3])parray + 1)) + 2
));14
return0;
15 }
二維陣列所有元素的訪問(陣列指標):
1 #include23int
main()
4,};
6int (*parray)[3
] = null;
78 parray =iarray;
910 printf("
array[0][0] = %d\n
", **parray);
11 printf("
array[1][2] = %d\n
", *(*(parray+1)+2
));12
return0;
13 }
1intmain()
2,};45
int (*parray)[3] =null;
67 parray =iarray;
89 printf("
array[0][0] = %d\n
", parray[0][0
]);10 printf("
array[1][2] = %d\n
", parray[1][2
]);11
return0;
12 }
二級指標
為指向指標的指標,指向的值必須是指標。
1intmain()
2,};
4int *iparray[2] = ;
5int **parray =null;
67 parray =iparray;
89 printf("
array[0][0] = %d\n
", parray[0][0
]);10 printf("
array[1][2] = %d\n
", parray[1][2
]);11
12return0;
13 }
C語言 陣列指標和陣列指標的理解
陣列指標和指標陣列如何分辨呢看他後面的側重 例如 分解 int a 3 int 3 a 指標陣列 int b 3 int 3 b 陣列指標 片段 這段 定義了乙個陣列指標和乙個陣列指標,利用指標的偏移來做測試 include int b 3 陣列指標 char str1 good char str2...
C 指標與陣列的理解
參考文章 雖然部分內容有錯誤,但是整體講的不錯 int a 3 輸出如下 陣列a的元素型別為int,因此相鄰兩個元素的位址相差4個位元組。每個元素的位址由16個十六進製制數表示,每個十六進製制數可由4個二進位制數表示,8個二進位制數占用乙個位元組的記憶體空間。因此元素的位址 即指標變數 占用8個位元...
c 陣列指標和指標陣列
先記住 指標陣列 本質是陣列,資料可以用來存放int float等物件,當然也可以存放指標。例子 陣列指標,用樓上的話就是指向陣列的指標,操作指標就可以運算元組如下 int a 3 int p a printf 陣列指標 d n p 1 列印的結果為2,原因是p初始化指向了陣列a的首位址,即a 0 ...