sizeof测量数组的长度问题

ckk1988 发布于 2013/11/12 16:06
阅读 914
收藏 0

char *a =new char[3];

cout<<sizeof(a)<<sizeof(*a);这个输出的分别是4,1

然而 char a[3];

cout<<sizeof(a)<<sizeof(*a);输出的是3,1;

请问这个到底是为什么啊?

加载中
0
醪糟儿蛋
醪糟儿蛋

a 是一个指针 sizeof(a) 计算的是指针大小

a 是一个数组 sizeof(a) 计算的是数组大小

0
ckk1988
ckk1988

引用来自“醪糟儿蛋”的答案

a 是一个指针 sizeof(a) 计算的是指针大小

a 是一个数组 sizeof(a) 计算的是数组大小

那假如我定义了一个char *a=new char[3];

该怎么样使用sizeof来测这个数组的大小呢?

醪糟儿蛋
醪糟儿蛋
回复 @YuHaidong : 小耶果 已经回答你了,看下面
YuHaidong
YuHaidong
如果是char *a=new char[3];这么定义的,只通过变量a是无法获得数组大小的,只能用其他变量把定义时的长度保存起来。
0
二进制宇宙
二进制宇宙
根本原因还是C++的可读性,就这个例子看可读性为0,写好注释
0
z
zhongxh
你也知道“sizeof”是“测量数组的长度”的,当然无法测量“指针指向的地址”的长度,因为指针实质是一个内存地址,其“指向的内存块的长度”是没有概念的,无意义的;如果是以0结尾的字符串,可以用strlen类函数来测量长度。
sizeof测量数组的长度
0
熙咖
熙咖
sizeof运算符是获取占用内存空间的大小。指针在32位机器中所占的内存大小永远是4个字节。
0
中山野鬼
中山野鬼

引用来自“路过的指针”的答案

sizeof运算符是获取占用内存空间的大小。指针在32位机器中所占的内存大小永远是4个字节。
哈。这个理解深刻,不过如今都64位了,gcc我也早换64位版本了。。。
中山野鬼
中山野鬼
回复 @YuHaidong : 和栈没毛关系,栈只是个存储方式而已。和实际存储区毛关系没有。 sizeof和实际存储空间大小有关系。哈。
YuHaidong
YuHaidong
sizeof计算的的是占用栈空间的大小,这样理解是不是更准确些。
熙咖
熙咖
没呢,64位的还没有真正普遍,现在还是32位最多
0
熙咖
熙咖
没呢,64位还没有真正的普遍,现在还是32位的最多
0
小耶果
小耶果
int len=sizeof(a) / sizeof(a[0]);
返回顶部
顶部