1. 程式人生 > >C語言中sizeof測試陣列指標大小問題

C語言中sizeof測試陣列指標大小問題

#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)。