C++中sizeof 求 string 大小 小结

声明一个 string S = “xiantao”

求string S 中字符的个数:(C++中类Sting提供了一些字符串的基本操作,其中length()就返回了字符串的字符个数)

cout << "the char_number of S" <<S.length() << endl;//返回7


求S(也就是S本身,它是一个引用) 在内存所占大小(单位:Byte):

cout << "sizeof sting S" <<sizeof(S) << endl; // 返回28

为什么会是这样呢?对比看一下这个输出

cout << "sizeof sting_type " <<sizeof(string) << endl; // 返回28

其实他俩所占的大小是一样的,S是一个string类型的引用,它本身也占有一定的内存。这个内存大小是固定的一班由编译器决定


求一个char char_a = 'T'所占内存大小

cout << "sizeof char" <<sizeof(char) << endl;//等于下面的

cout << "sizeof char_a" <<sizeof(char_a) << endl;//输出是 1

同样在string中每个字符占内存大小也是char类型的大小。


那么怎么求出一个string S在内存中的大小呢。应用以上的sizeof用法就能知道:space of string S:sizeof(char) * (S.length()+1)

这里面为什么是(S.length()+1)个呢?其实由于string 类型需要一个结束符来当标志。最后一个结束符就是NULL,在这里就把他当做是string的地址空间。

这里插入一点关于string的最后一个结束标志它打印出来的是个空字符


求出S的首地址char *address_first = &S[0];很明显address_first 是一个char类型的指针

cout << *(address_first+7) << "***" << endl;

输出结果是“@***” //这里用@代替空格

为了避免造成误解,还要找个对比看一下

cout <<*(address_first+8)<< "****" << endl;

结果输出了一个乱码和***。


sizeof一些基本类型的大小:sizeof(type)  在64位机器上编译结果如下

sizeof (unsigned int) =  sizeof (int) = sizeof(long)=4;

sizeof (long long) = 8;

sizeof (float) = 4;

sizeof(double) = 8;

sizeof(bool) = 1;

sizeof(char) = 1;

sizeof下求解一些数组(array),结构体(struct),联合体(union)

声明个数组 int arr[6]

一个结构体:

struct Stru{

int a;

char b;

long long c;

};

有这个函数 void function(int arry[]){

cout << sizeof(arr) << endl;

}

关于数组应该注意的:

求数组的length。sizeof(arr) / sizeof(int);

但是如果这样吧一个数组当做实参传递给一个函数,在函数中又会发生什么呢?

如上面的函数,运行之,能得到一个int 类型指针的大小:4 Byte。为什么?在传递数组时,其实只是把指针传递给了函数当做实参,不是整个 数组。而所有指针类型求sizeof都是4字节。

关于结构体要注意的:

求结构体Stru的sizeof(Stru)是16=(4 + 4 + 8)Byte

为什么上面计算的Stru中吧char类型成员看成4呢?之前在一个博客里看见 为了字节对齐。计算机一次可以32位进行计算。所以吧char类型和int 类型对齐进行计算。

关于更多sizeof特殊任性用法看这里



  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值