注册 登录
编程论坛 C++教室

看到关于sizeof的帖子,蹦出了出现了一个问题,望高手解答!

c453413516 发布于 2011-04-23 16:36, 434 次点击
废话不多说,直接进入主题:
#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


为什么会出现不同结果?
2 回复
#2
ucyan2011-04-23 18:37
在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 编辑 ]
#3
c4534135162011-04-24 09:52
回复 2楼 ucyan
恩,明白了,谢谢!
1