int a = ;對陣列名取位址,得到的指標為指向整個陣列的指標。int (*p)[3] = &a; //
注意左值
形參為陣列時勿須帶陣列長度,因為計算機不會處理,如果需要傳陣列長度,需要另外加引數。
1 #include 23//view codevoid 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 }
1 #include 23//view codevoid 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 }
深入理解C C 陣列和指標
c語言中陣列和指標是一種很特別的關係,首先本質上肯定是不同的,本文各個角度論述陣列和指標。一 陣列與指標的關係 陣列和指標是兩種不同的型別,陣列具有確定數量的元素,而指標只是乙個標量值。陣列可以在某些情況下轉換為指標,當陣列名在表示式中使用時,編譯器會把陣列名轉換為乙個指標常量,是陣列中的第乙個元素...
深入理解C C 指標
c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標 準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可 以說是相反的。...
深入理解指標和陣列 指標和函式
指向函式指標陣列的指標 在了解了指標之後,可以得出,指標就是乙個變數,用來存放位址的變數。位址就相當於門牌號,而指標就是存放它的變數,對指標進行解引用 則相當於拿一把鑰匙去開對應的門牌號的門,開啟門,訪問其中的變數。指標的大小在32位平台上是4個位元組,在64位平台上是8個位元組。如有以下 先看下面...