C C 深入理解指標和陣列的關係

2022-05-06 18:00:12 字數 2091 閱讀 4014

int a = ;

int (*p)[3] = &a; //

注意左值

對陣列名取位址,得到的指標為指向整個陣列的指標。

形參為陣列時勿須帶陣列長度,因為計算機不會處理,如果需要傳陣列長度,需要另外加引數。

1 #include 23//

void array_add(int a, int len)

4void array_add(int *p, int

len)511

int main(void)12

;14int i = 0;15

int *p1 =a;

16int (*p2)[3] = &a;

17int len = sizeof(a)/sizeof(int

);18

19array_add(a,len);

20for(i=0; i)

21 printf("

%d\t

", a[i]);

22 printf("\n"

);23

24 printf("

a[1] = %d\n

", *(p1+1

));25 printf("

a[1] = %d\n

", p1[1

]);26 printf("

a[1] = %d\n

", 1

[p1]);

2728 printf("

a[1] = %d\n

", (*p2)[1

]);29 printf("

a[1] = %d\n

", *(*p2 +1

));30

31return0;

32 }

view code

1 #include 23//

void array_add(int a, int len)

4int array_add(int (*p)[3], int row, int

lines)515

int main(void)16

;19int (*p[2])[3] = ;

20int (*p1)[3] = a;//

陣列的名字代表指向陣列首元素的首位址(這裡二維陣列的首元素是乙個一維陣列)

21int (*p2)[2][3] = &a;//

對陣列名取位址之後,其指標指向整個陣列,在這裡p2指向整個二維陣列,若p2+1,則跳過24個位元組,即整個陣列。

22int *p3 = a[0

];23

int (*p4)[3] = &a[0

];24

int b = a[0][0

];25

int *p5 = *a; //

在這裡a可以看做是指向行的位址,加*之後變成了指向列的位址。(這種描述方式只是便於理解)

26int result = 0;27

28 result = array_add(a, 2, 3

);29 printf("

result = %d\n

", result);

3031 printf("

a[1][1] = %d\n

", *(*(a+1)+1

));32 printf("

a[1][1] = %d\n

", *(*(p1+1)+1

));33 printf("

a[1][1] = %d\n

", p1[1][1

]);34 printf("

a[1][1] = %d\n

", (*p2)[1][1

]);35 printf("

a[1][1] = %d\n

", *(p3+4

));36 printf("

a[1][1] = %d\n

", *(*(p4+1)+1

));37

38return0;

39 }

view code

深入理解C C 陣列和指標

c語言中陣列和指標是一種很特別的關係,首先本質上肯定是不同的,本文各個角度論述陣列和指標。一 陣列與指標的關係 陣列和指標是兩種不同的型別,陣列具有確定數量的元素,而指標只是乙個標量值。陣列可以在某些情況下轉換為指標,當陣列名在表示式中使用時,編譯器會把陣列名轉換為乙個指標常量,是陣列中的第乙個元素...

深入理解C C 指標

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標 準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可 以說是相反的。...

深入理解指標和陣列 指標和函式

指向函式指標陣列的指標 在了解了指標之後,可以得出,指標就是乙個變數,用來存放位址的變數。位址就相當於門牌號,而指標就是存放它的變數,對指標進行解引用 則相當於拿一把鑰匙去開對應的門牌號的門,開啟門,訪問其中的變數。指標的大小在32位平台上是4個位元組,在64位平台上是8個位元組。如有以下 先看下面...