局部变量的作用域

导航

<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

公告

我的邮件:

留言簿(7)

随笔分类

随笔档案

文章档案

我的链接

搜索

最新评论

阅读排行榜

评论排行榜

我的一个常识性错误

void foo( char bar[100] )
{
    printf( 
"%d "sizeof(bar) );
}



int main( int argc, char** argv )
{
    
char bar[100];
    foo( bar );
    
return 0;
}


一直认为输出应该是100, 但实际却是4(即sizeof(char*)).
现在,唯一让我庆幸的是我在函数参数中使用数组, 并且依赖sizeof的结果的时候极少.

 

posted on 2006-10-08 09:17 局部变量 阅读(3550) 评论(10)  编辑 收藏

评论

# re: 我的一个常识性错误 2006-10-08 15:05 清风雨

呵呵,这个问题确实是。
写char []或char *一样的,数组引用比较烦 char (&arg)[128]。
我一般就是把他作为提示用用,而不用于约束和检测。

# re: 我的一个常识性错误 2006-10-08 18:04 zuilang

不要庆幸了,面壁思过好了^_^

# re: 我的一个常识性错误 2006-10-08 18:48 HateMath

不好意思的说,前几天写代码时也犯过类似的错误.

# re: 我的一个常识性错误 2006-10-09 07:21 sjdev

数组名在作为函数参数传递被解析为指针指针

# re: 我的一个常识性错误 2006-10-09 07:22 sjdev

你如果在main里面,sizeof结果就是100了

# re: 我的一个常识性错误 2006-10-09 08:17 晓寒

为了测试你是否真的搞明白了,在测试你一个例子:

void TestChar(char str[100])
{
strcpy(str, "12");
}

void Test()
{
char szTest[] = { "asdf"};
TestChar(szTest);
MessageBox(szTest);
}

显示什么?

:)

# re: 我的一个常识性错误 2006-10-11 12:46 局部变量

to sjdev:
呵呵,这些我还是比较清楚的

to 晓寒:
好像你和我说的是两个问题, 不过我还是小心的测试了一下, 输出和我预计的一致:)

# re: 我的一个常识性错误 2007-01-09 12:13 noway

给解释一下吧 不明白

# to noway 2007-01-24 08:32 局部变量

没有什么可解释的, 就是编译器对一些情况的处理方式, 知道是这样就行了

# 我的一个常识性错误 2007-02-27 21:31 困惑

你们当变量是菜鸟哈:)

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]