关于sizeof问题,这个程序输出结果怎么解释??求高手指教啊!谢谢了!!

#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[]="hello world";
char *p=a;
cout<<sizeof(a)<<"\n"<<sizeof(p)<<endl<<strlen(p)<<endl;
system("pause");
return 0;
}

1. sizeof(a)输出结果为12,因为字符串以'\0'结束,'\0'占一个字节。
2. sizeof(p)32位系统输出为4字节(4字节=4*8位=32位),64位系统输出为8字节(8字节=8*8位=64位),。指针只是一个存放变量地址的一个变量
3. strlen(p)输出结果为11。strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
strlen(a)的结果也是11

指针变量的sizeof

  学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在64位系统中指针变量的sizeof结果为8。追问

有两个问题:
第一:sizeof(a)中的a不是数组的首地址吗?既然是地址应该也是4个字节啊?这什么情况?我记得有一种情况就是4个字节的,忘记是哪种形式了!
第二:后面的那个strlen(p)和strlen(a)是一个意思吗?有没有差别?都是计算数组的长度?

追答

1. sizeof(*a)才是a的地址。sizeof(a)是字符串数组a的大小
2. strlen(p)和strlen(a),strlen不区分是数组还是指针,就读到\0为止返回长度。所以是一样的

追问

*a应该是第一个元素吧,所以sizeof(*a)=1??

追答

对,sizeof(*a)=1

参考资料:http://baike.baidu.com/view/1078660.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-05
sizeof对数组输出的数组的大小,对指针输出的是指针本身所占的大小。
第2个回答  2012-11-05
结果:

12
4
11

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网