C++字符串sizeof问题

rickys2080 2013-01-06 06:36:00
如注释所问,有疑惑,请大家讨论讨论

#include <iostream>

using namespace std;
int main(int argc, char *argv[])
{
//下面分配的二维字符数组,第二维大小是16
char NTPsever[][16] = {
"123456",
"12"};
cout<<sizeof(NTPsever)<<endl;//32,为什么是32?
cout<<sizeof(NTPsever[0])<<endl;//16,是分配的大小吧?
cout<<sizeof(NTPsever[1])<<endl;//16

string str[2] = {
"1234567890",
"12"};
cout<<sizeof(str)<<endl;//8,为什么是8?
cout<<sizeof(str[0])<<endl;//4,为什么是4?难道是指针?
cout<<sizeof(str[1])<<endl;//4

return 0;
}
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickys2080 2013-01-07
  • 打赏
  • 举报
回复
楼上诸位言之有理, 楼主来点出关键点吧:
cout<<sizeof(str[0])<<endl;//4,为什么是4?难道是指针? 
当然不是指针,这里是string对象的大小。 C++的string是一个“class”,所以这里的str[0]的对象。
gtyi999 2013-01-06
  • 打赏
  • 举报
回复
同意楼上。。。。
fang60323 2013-01-06
  • 打赏
  • 举报
回复
sizeof函数是静态的,在编译的时候就能确定其返回值.也就是数据的占的内存字节数..其计算结果只看其 参数的数据类型.. 对于基本数据类型,就是所占字节数 . 对于数组名,算的就是整个数组字节数.. 对于类和对象, 只看类的成员变量的大小,有多个变量需要考虑内存对齐的影响。 有例外如果无成员变量为1. 因此char NTPsever[][16] : ,整个数组32字节,一维数组为16字节。 string str[2] : string类只有一个成员变量,为char*的指针,因此每一个string对象sizeof都是4字节, 那么这里的数组自然就是8字节。
疯狂的红豆 2013-01-06
  • 打赏
  • 举报
回复
//下面分配的二维字符数组,第二维大小是16 char NTPsever[][16] = { "123456", "12"}; 你这是开辟了一个二维数组,第一行靠前放置了字符串"123456"后面的用空字符''填充,第二行同理。 数组名关联一块内存空间,当你对数组名使用sizeof时会返回这个数组的大小的,sizeof返回的是字节数,你的char类型就是每个字符占一个字节嘛,所以sizeof返回的就是数组的大小,如果你数组中是整型的话那就是32*4字节了。 cout<<sizeof(NTPsever)<<endl;//32,为什么是32? cout<<sizeof(NTPsever[0])<<endl;//16,是分配的大小吧? 二维数组其实可以理解为一位数组,然后这个一位数组的每一个元素又是一个数组类型的。其实这样子理解更好解释数组与指针的一些关系,我是这么觉得的。NTPserver[0]是二维数组的第一个元素,同时他也是一个数组长度为二维数组的列数。 cout<<sizeof(NTPsever[1])<<endl;//16
lee_鹿游原 2013-01-06
  • 打赏
  • 举报
回复
sizeof(string)在不同编译器下值不一样,这跟编译器对class string的实现方式有关。 不管什么平台,都是指string类型分配的空间(里面可能含有多个指针成员)。 我这边sizeof(str)是64,2个string,1个是32.
lin5161678 2013-01-06
  • 打赏
  • 举报
回复
数组有32个字节 自然sizeof得到32 string类的大小和实现有关 你这里 一个string对象的大小是4 这个对象的大小和他存储什么样的字符没关系的

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧