当前位置: 代码迷 >> C语言 >> 求助一个关于sizeof的问题
  详细解决方案

求助一个关于sizeof的问题

热度:450   发布时间:2007-10-18 22:36:32.0
求助一个关于sizeof的问题

看看下面的程序(在VC6.0上通过):
#include <stdio.h>
void example(char acHello[])
{
printf("%d",sizeof(acHello));
return;
}

void main()
{
char acHello[]="hello";
example(acHello);
getchar();
return;
}
运行结果是4,而改为下面的程序:
void main()
{
char acHello[]="hello";
printf("%d",sizeof(acHello));
//example(acHello);
getchar();
return;
}
运行结果是6,为什么不一样?
哪位大虾帮我解释一下,我对sizeof这块不是很明白,还有谁对C语言的字节对齐比较明白,能大致讲一下,或者
提供资料出处,感激不尽!

搜索更多相关的解决方案: sizeof  

----------------解决方案--------------------------------------------------------
4是指针本身的大小

我想可能是这样的,数组在main定义,这里知道数组有几个元素,所以可以输出6,

但是作为函数的参数时,example函数收到的其实只是一个指针,并不知道那是个数组,也不知道有几个元素,所以只能输出指针本身的大小
----------------解决方案--------------------------------------------------------
在example函数的定义中
void example(char acHello[])已经说明了参数是个数组了啊
我觉得sizeof应该计算从数组首元素指针开始到‘\0’的字节数才对啊。
所以应该还是有某个参数传递的规则我不清楚!
----------------解决方案--------------------------------------------------------
是这样的,在程序二里sizeof得到的是该字符串的长度(包括‘\n'),所以为6;而在程序一里,sizeof实际上是在测试指针的大小(在你这个系统里,任何类型的指针大小均为4字节)。void example(char acHello[])和void example(char *acHello) 没有任何区别
----------------解决方案--------------------------------------------------------
如楼上所说,数组名作为参数,实际上也就是个指针,而字符指针指向的内容,是无法保证最后总是有'\0'这个结束符的,所以不能通过结束符来判断
----------------解决方案--------------------------------------------------------
一个是字符指针的大小
一个是字符数组的大小(由元素个数确定)

----------------解决方案--------------------------------------------------------
  相关解决方案