#define _CRT_SECURE_NO_WARNINGS
#include
#include
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)。