在c++中对数组应用sizeof得到的是数组的长度,对指针应用得到的是指针的长度。 求解释?

顺便问一下,C++中的长度单位是什么,除用程序测出长度外,有没有其他方法,比如人计算。

数组int a[4]; sizeof(a)=4*4=16字节 (int为4个字节)
int *p=a; sizeof(p)=4字节
对数组应用sizeof,可以得到整个数组分配的字节数(存储全部数据占用的内存字节数)
对指针应用sizeof,只是得到分配给用来存储一个地址值的指针所用的字节数,即4个字节。
(上面都是在32位编译系统)

C++中sizeof得到的是字节数,也就是你所说的“长度单位”

求大小,可以手动计算,需要知道数据类型,是否有字节对齐(编译器选项,也可代码控制和切换)。我以前做过统计结构体大小的小程序,同时计算每个成员变量的相对地址。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-25
sizeof()求得实际是分配的内存空间, 对数组sizeof其实不是他的长度,只有当数组是字符数组的时候才是,因为32位下,每个字符占一个字节长度,如果是整型数组sizeof的结果是 sizeof(int)* 数组长度, 至于指针, 他是一个指向变量的地址,本是在32位机器下占用4个字节长度。 c++的长度单位是字节。 当然除了用函数计算长度外, 当然可以人工计算,但是人工计算不一定正确, 不确定是多少为机器, 比如int ar[5]; 32位下人工计算是20. 但是机器计算比较好, sizeof(int) * 5 = 20
第2个回答  2012-07-25
因为指针存在的是它指向的地址。。。所以对指针SIZEOF,得到的其实是这个地址的长度,不同机器可能同一程序可能得到不同长度。
SIZEOF数组得到的是数组的长度,就是数组里面元素的个数
第3个回答  2012-07-25
楼上回答不错,C++长度指的是变量,数组,指针等在内存中占用的字节数,c++长度可以手工计算,只需根据相就变量类型来推广算,常见的数据类型如 short int ,int,long int,float,double等等,这些分别占用相应字节数,计算机位数不同,占用字节数也不大相同,如上的占用字节数一般是
2,2,4,4,8。
比如定义:float a[5],则可计算:4*5=20字节,跟sizeof得到的相同
第4个回答  2012-07-25
路过,补充一下
在32位的系统里
sizeof(int)=4字节
sizeof(long)=4字节

在64位的系统里
sizeof(int)=4字节
sizeof(long)=8字节,已在AIX上验证
相似回答