| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:sizeof 的问题
只看楼主 加入收藏
jhkyy
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2009-5-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
sizeof 的问题
程序代码:
#include <iostream>
using namespace std;
void Foo ( char str[100]);
int main()
{
    char a[100]="dfkdshkfihjf";
    Foo(a);
    return 0;


}
void Foo ( char str[100]) 
{
    cout<<sizeof(str)<<endl;   
}
为什么结果为 4 能详细解释一下哇,谢谢了
2011-04-22 14:38
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:9 
a是数组名,你现在就理解成a是一个特殊的指针(不能修改a的值),它指向一段大小为sizeof(char)*100的内存的首地址。
费话就么多就一个意思,a是一个特殊指针,指针的大小就是4个字节。(编译器为64位的系统产生的代码中的指针就应该是8个字节)

迭代的是人,递归的是神。
2011-04-22 14:46
mm1010220cs
Rank: 2
等 级:论坛游民
帖 子:36
专家分:98
注 册:2011-4-7
收藏
得分:1 
2L说的很细啊
char str[100]
sizeof(str)计算的是数组首地址的长度,地址为int型,所以是4
2011-04-22 15:11
jhkyy
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2009-5-1
收藏
得分:0 
知道了,谢谢了!!
2011-04-22 16:36
stranger55
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2011-4-23
收藏
得分:0 
其实这个问题 不是2,3楼那样说的。
楼主 若在main函数中
定义字符数组后面添加代码 cout<<sizeof(a)<<endl;

#include <iostream>
using namespace std;
void Foo ( char str[100]);
int main()
{
    char a[100]="dfkdshkfihjf";
    cout<<sizeof(a)<<endl;//此处为添加代码处
    Foo(a);
    return 0;
}
void Foo ( char str[100])
{
    cout<<sizeof(str)<<endl;   
}
运行结果将会是 100
                4
为什么了  这里我们得了解 sizeof()
                                1。若对指针进行操作,则将会返回存放指针所需的内存空间
                                2. 若对数组进行操作,则会返回整个数组在内存中的存储长度
而 sizeof(a)实质是对数组进行操作,char的所需的内存空间为1 这里定义的数组大小为100.所以返回的是100;
但是若想返回4 其实这里可以进行显示类型转换 sizeof((char*)a);
而为什么函数里面返回的是4 呢,那是因为 指定数组形参其实有三种方法,
                                 1.void Foo ( char str[100]);
                                 2.void Foo ( char str[]) ;
                                 3.void Foo ( char *str);
而三种定义方法都是等价的,且形参类型都是 int*
所以在这里 进行sizeof(a)其实是对指针进行操作。所以返回的是4;
收到的鲜花
  • lintaoyn2011-04-26 07:04 送鲜花  10朵   附言:好文章
2011-04-25 22:50
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
回复 5楼 stranger55
这分应该给你的。

迭代的是人,递归的是神。
2011-04-26 07:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
嗯。建议楼主看看5楼的解释,以修正自己错误的认识~~
2011-04-26 10:00
top_dada
Rank: 2
等 级:论坛游民
帖 子:35
专家分:26
注 册:2011-4-20
收藏
得分:0 
5楼基础很扎。。~~挺5楼~
2011-04-27 09:31
jhkyy
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2009-5-1
收藏
得分:0 
回复 5楼 stranger55
多谢解答!!
2011-05-05 11:07
快速回复:sizeof 的问题
数据加载中...
 
   



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

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