| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 434 人关注过本帖
标题:看到关于sizeof的帖子,蹦出了出现了一个问题,望高手解答!
只看楼主 加入收藏
c453413516
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2010-12-5
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:2 
看到关于sizeof的帖子,蹦出了出现了一个问题,望高手解答!
废话不多说,直接进入主题:
#include <stdafx.h>
#include <iostream>
using namespace std;
void Foo ( char str[100]);
int main()
{
    char a[100]="dfkdshkfihjf";
    Foo(a);
    char arrSTR[]={"c/c++ professional"};
    cout<<a<<endl;
    cout<<arrSTR<<endl;
   
    cout<<endl;
    cout<<sizeof(arrSTR)<<endl;
    Foo(arrSTR);
    return 0;


}
void Foo ( char str[100])
{
    cout<<sizeof(str)<<endl;   
}
(其中部分源代码是借鉴“jhkyy”帖子上面的)

为什么运行结果为:
dfkdshkfihjf
c/c++ professional//(这不是关键,下面出现的才是问题)

19
100
4


为什么会出现不同结果?
搜索更多相关主题的帖子: return 源代码 主题 
2011-04-23 16:36
ucyan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:61
专家分:198
注 册:2011-4-12
收藏
得分:20 
在c++的函数里面,如果把一个数组作为参数传进去,那么这个数组就会退化为一个指针
所以在函数中得出的结果不是你预期的结果,你得出的结果4是指一个指针在内存中占用
的字节数。
sizeof(char)为1,即1个字节(BYTE), char是一个字符,存放一个字符用1个byte,即1个字节
sizeof(char *)为4, 因为算的是存放"指向字符的指针"的单元有多大.也就是存放一个"地址"
的单元有多大.一般计算机系统是32位的,地址是32位,正好是4个字节-- 4 Bytes. (1 Byte = 8 bits = 8 位),
如果计算机是64位,它所得的结果应该为8(我没有试过)。
除此之外,sizeof(int *) sizeof(double *)等所得的结果也是4。应为它们都内置类型,都与机器里的内部地址总线的宽度
有关
你最后的运行结果是不是打错啊~~
不是应该为:
4
dfk.........
c/c++........

19
4
19是c/c++ professional的长度18在加1(即加上'\0')

[ 本帖最后由 ucyan 于 2011-4-23 19:09 编辑 ]
2011-04-23 18:37
c453413516
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2010-12-5
收藏
得分:0 
回复 2楼 ucyan
恩,明白了,谢谢!
2011-04-24 09:52
快速回复:看到关于sizeof的帖子,蹦出了出现了一个问题,望高手解答!
数据加载中...
 
   



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

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