关于C语言sizeof检测字符串长度的问题

char buf[100];
sizeof(buf) ;//结果等于100
/************************/
char *PP = buf;
sizeof(PP);//结果等于4
/*************************/
struct B
{
char buf[100];
}Buf;
struct B *BB = &Buf;
sizeof(BB->buf);//结果等于100,而不是4
为什么会这样????

字符串长度用 strlen() 测定。
sizeof() 是 “运算符”,计算后面的 类型 或 变量 占据的内存(以字节为单位)。

例:
sizeof(unsigned int) 得 4
sizeof(BB->buf); BB->buf 对象是 char buf[100]; 所以得 100
sizeof(PP); char *PP; PP 是指针,等同 一个 unsigned int 地址,所以得 4。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-23
为什么应该是4啊
你取的是buf的size啊 buf是个char数组 你这样用取的是数组的长度追问

为什么

char *PP = buf;
sizeof(PP);//结果等于4

结果是4呢???

追答

因为sizeof(PP)获取的是PP所占用的内存空间,PP是个指针,指向buf这个数组的首地址,他占用的内存空间是4
sizeof(BB->buf)取的是BB这个struct里面buf成员所占内存空间 他是一个长度为100的char数组 所占空间是100*1
你可以看下这个文章,是讲数组名和指针的区别的:

http://soft.yesky.com/242/2082242.shtml

本回答被提问者采纳
第2个回答  2013-07-23
指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4。
BB是指针变量,但BB->buf不是。追问

BB->buf为什么不是呢???

追答

BB->buf是指BB这个struct里面buf成员

第3个回答  2013-07-23
因为buf后面其实还有一个\0结尾,这也算一个字节,所以是结果是4.
第4个回答  2013-07-23
你这个buf不在同一个语句快中肯定是不一样的结果啊,前面的结果是4应为初始化时候赋值为buf,分来4个字节,后面的buf是直接分给了100个字节的,这个不奇怪吧……用程序测试,相信结果就好
相似回答