| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:求助一个关于sizeof的问题
只看楼主 加入收藏
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
 问题点数:0 回复次数:5 
求助一个关于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 
2007-10-18 22:36
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
4是指针本身的大小

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

但是作为函数的参数时,example函数收到的其实只是一个指针,并不知道那是个数组,也不知道有几个元素,所以只能输出指针本身的大小

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-18 22:46
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
在example函数的定义中
void example(char acHello[])已经说明了参数是个数组了啊
我觉得sizeof应该计算从数组首元素指针开始到‘\0’的字节数才对啊。
所以应该还是有某个参数传递的规则我不清楚!

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-10-18 23:04
vinyie
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-10-7
收藏
得分:0 
是这样的,在程序二里sizeof得到的是该字符串的长度(包括‘\n'),所以为6;而在程序一里,sizeof实际上是在测试指针的大小(在你这个系统里,任何类型的指针大小均为4字节)。void example(char acHello[])和void example(char *acHello) 没有任何区别
2007-10-18 23:18
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
如楼上所说,数组名作为参数,实际上也就是个指针,而字符指针指向的内容,是无法保证最后总是有'\0'这个结束符的,所以不能通过结束符来判断

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-19 08:13
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
一个是字符指针的大小
一个是字符数组的大小(由元素个数确定)

倚天照海花无数,流水高山心自知。
2007-10-19 10:51
快速回复:求助一个关于sizeof的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011760 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved