关于string的sizeof有关问题

关于string的sizeof问题这里有个string数组,string iceCream[] {pralines & cream,fudge ripple,ja

关于string的sizeof问题
这里有个string数组,
string iceCream[] = {
  "pralines & cream",
  "fudge ripple",
  "jamocha almond fudge",
  "wild mountain blackberry",
  "raspberry sorbet",
  "lemon swirl",
  "rocky road",
  "deep chocolate fudge"
};

我用sizeof(*iceCream)求值,在我机器上是32,不知道为何原因,那位高手给我解释一下?

我用的vc2005。

[解决办法]
sf,帮顶
[解决办法]
string是系统内部类,它的大小是32

cout << sizeof(string) << endl;

输出32
[解决办法]
你试一下
cout << sizeof(string) << endl;
cout << sizeof(iceCream) << endl;
cout << sizeof(*iceCream) << endl;

就明白了
[解决办法]
因机器不同会有所不同,
我的16
[解决办法]
string内部的实现是保存一个指针.
sizeof(string) 等同于 sizeof(char*), 一般的结果也就是4.

cout < < sizeof(string) < < endl; //结果是4
cout < < sizeof(iceCream) < < endl; //是(数组大小*sizeof(string)), 也就是8 * 4 = 32. 
cout < < sizeof(*iceCream) < < endl; //*iceCream指向的是第1个string元素, 也就是sizeof(string), 结果是4

楼主可以把string iceCream[] = { 
"pralines & cream", 
"fudge ripple", 
"jamocha almond fudge", 
"wild mountain blackberry", 
"raspberry sorbet", 
"lemon swirl", 
"rocky road", 
"deep chocolate fudge" ,
"test abc" //增加一个元素测试下看看结果
};
[解决办法]
这是和编译器相关的!
[解决办法]

探讨
因机器不同会有所不同,
我的16

[解决办法]
探讨
哦,明白了,
sizeof和strlen是不一样的,谢谢paidfighting

strlen的话是string的长度,以\0结束,而sizeof是标识符,不是函数,

给分了!

[解决办法]
探讨
引用:
因机器不同会有所不同,
我的16


16是因为你机器的指针大小是2, 2*8=16.

[解决办法]
你试一下 
cout < < sizeof(string) < < endl; 
cout < < sizeof(iceCream) < < endl; 
cout < < sizeof(*iceCream) < < endl;
因为这个是随着着系统的不同而不同
[解决办法]
存指针
可以试下
char *str = new char[50];
sizeof(str)等于多少

字符串用指针表示,而指针占用的空间和字符串内容没有关系



...to 10楼
string不就是个类么= =bb
[解决办法]
对了,另外...一般不会用sizeof(string)的吧,我想|||
而且求string长度也不会用strlen的吧
strlen是针对C字符串的....
[解决办法]
探讨
另有一个疑问,

既然sizeof(*iceCream) = 32了,那就表示该string数组的第一个元素所占的空间是32个字节,那当我将数组中的第一个元素的值修改为“pralines & creampralines & creampralines & creampralines & creampralines & cream”(超过32个字节了),当我输出第一个元素的时候,他为什么还能够运行成功呢,这个超过32字节的字符串是存放在那里了?他的长度不是只能占用32字节么?



[解决办法]
字符串的长度要用strlen来求。