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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值