C語言中sizeof測試陣列指標大小問題
阿新 • • 發佈:2018-12-16
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { int arr[5] = {1, 2, 3, 4, 5}; int(*p)[5] = &arr; //typedef與賦值操作不能同時使用。 typedef int(*P)[5]; //p指向的是整個陣列的地址 //printf("%d\n", (*p)[1]); P arr_p; //陣列指標所代表的是陣列的首地址,及整個陣列的地址。 //所以在測試(*p)的位元組大小時,與陣列名相同。 printf("%d\n", sizeof(arr));//20 printf("%d\n", sizeof(*p));//20 printf("%d\n", sizeof(*arr_p));//20 system("pause"); return 0; }
一.陣列名與陣列指標變數的關係
arr的內容是首元素的地址,&arr的內容是這個陣列的地址。
陣列指標的本質就是指標,這個指標指向陣列的首地址,即這個陣列的地址。
對陣列陣列指標進行間接尋(*)址操作得到的就是陣列的首元素地址。所以,再對*p進行間接定址或下標訪問時,就可以得到之後的陣列中的元素了。
二.typedef的一些問題
此外,在使用typedef對變數起別名的同時,不能夠對變數進行賦值操作。
typedef一般對構建好的型別起別名(在此案例中,需要先定義陣列指標,再使用typedef)。