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 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 a(20);
//a里面的data指向了一个长度为20的char数组哦^_^
cout<<
sizeof
(A
)<<endl;
//可是sizeof(A)只有4或者8,仅仅是一个char指针的大小^_^
return
0;
};
总结:sizeof就是个框地址的,不用太深究