加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

sizeof在string, char*,char[10]不同用法

(2016-08-08 14:42:37)
分类: vs2015-c语言基础
string的情况:
1、sizeof()返回的是string对象所占用的空间,而不是string所存储的字符串的大小。
2、string的实现在各库中可能有所不同,但是在同一库中相同的一点是,无论string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。 
3、sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现,VC6.0测试后sizeof(string)=16,说明还是跟编译器有关。


cout << sizeof(string) << endl;//为28
string s = "0123456789";
cout << sizeof(s); //为28
string str[5] = { "12", "asd","sf","sdf","ded"};
cout << str[1]  //为asd
cout << sizeof(str); //为28*5=140
cout << str[1].size() ;//为3

char*的情况:
char *a = "12345\0";
cout << strlen(a) << "," << sizeof(*a)<<"," <<sizeof(a) //为5,1,4 ,a是一个指针,它指向字串的首地址,但他不是字串本身。指针的长度永远等于机器地址寄存器字长。你的机器是32位机,sizeof(s)就是4字节长
char *a1 = "12\0123d\0";
cout << strlen(a1) << "," << sizeof(a1) ;//为5,4。零打头不带x的是8 进制数, \012 就是十进制的10, ascii 的10 就是控制字符换行,即\n

 char[]的情况:
char a2[7] = "a0\0a0\0";
cout << strlen(a2) << "," << sizeof(a2) ;
//为2,7 sizeof求数组所占空间大小,为7;
//strlen求数组元素的实际长度,为2;


另外,举个class的情况:

class A
{
    pulic:
    char data;
    A(int i){data new char[i]};
    ~A(){detele [] data};
};
 
int main
{
    a(20);//a里面的data指向了一个长度为20的char数组哦^_^
    cout<<sizeof(A)<<endl;//可是sizeof(A)只有4或者8,仅仅是一个char指针的大小^_^
    return 0;
};
总结:sizeof就是个框地址的,不用太深究

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有