c陣列和指標的理解

2022-03-27 04:33:10 字數 2717 閱讀 2513

1 #include2

3int 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的指標)

對陣列的訪問,總是轉換為對指標的訪問!

1

int 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 #include2

intmain()

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 #include2

3int

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 }

1

intmain()

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 }

二級指標

為指向指標的指標,指向的值必須是指標。

1

intmain()

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