首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sizeof 对 指针,数组名,的区别解决方法

2012-03-24 
sizeof对 指针,数组名,的区别charstr[]hello char*pstrintlensizeof(str)//结果为6lensizeof(p)

sizeof 对 指针,数组名,的区别
char   str[]   =   "hello ";
char   *p   =   str   ;
int   len   =   sizeof   (str   );   //   结果为6
len   =   sizeof   (   p   );   //结果为4

                结果为什么会不同?


[解决办法]
len = sizeof ( p ); //结果为4 指的是p占四个字节 是P的长

[解决办法]
char str[] = "hello ";
char *p = str ;
int len = sizeof (str ); // 结果为6
// sizeof 数组名时是计算数组的长度
len = sizeof ( p ); //结果为4
// p是个指针,指针在32位机子上长度是4字节的
[解决办法]
str是數組,當然sizeof是數組的內容大小。

p是指針,指針變量本身是存放地質的,一般系統都是4個字節大小。
[解决办法]
楼上的说得非常正确
[解决办法]
数组名 包含数组的长度信息,得到的size是这个数组字节数。

指针 没有数组长度信息,sizeof的结果是这个指针本身的大小,
在32位环境下指针是 4 字节的, 16位环境下结果就是 2 了。
[解决办法]
“结果为什么不同?”,回答很简单:
sizeof()是C++语言自已的运算子。一般而言,关于运算子的行为属于语言本身自已的规定,不存在为什么的问题(可以认为是语言的强制性规则。) 。也就说C++为sizeof运算子规定的行为就是要对数组名返回其数组所占内存的byte计数,而对其它变量返回应有的类型byte长度,
比如:
把 "char str[]; "改为 "long str[4]; "则 "sizeof(str); "将返回值为16(16个byte)。而对其指向数组str[4]指针,在32位平台上内存地址的byte长度4。
[解决办法]
int len = sizeof (str ); // 结果为6
len = sizeof ( p ); //结果为4
======================================================
对数组名sizeof 得到的是数组占用内存的大小
如:
int a[20];
sizeof(a)=80;//因为每个int为4字节,共20个int
要得到数组的大小,可以这样
sizeof(a)/sizeof(int) = 20

对指针sizeof 得到的是存储指针本身需要的大小,4个字节

热点排行