sizeof--转载

首先要明确sizeof 不是函数,也不是一元运算符,他是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被替代类型,如 int a=8;sizeof(a);在编译过程中,它不管a的值是什么,只是被替换成类型 sizeof(int); 结果为4.如果sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意 因为a=6是不被编译的,所以执行完sizeof(a=6);a的值还是8,是不变的!

记住以下几个结论:
1.unsigned影响的只是最高位bit的意义(正负),数据长度不会被改变的。所以sizeof(unsigned int) == sizeof(int);
2.自定义类型的sizeof取值等同于它的类型原形。如typedef short WORD;sizeof(short) == sizeof(WORD)。
3.对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:int f1(){return 0;};
cout<<sizeof(f1())<<endl; // f1()返回值为int,因此被认为是int
4.只要是指针,大小就是4。如:cout<<sizeof(string*)<<endl; // 4
5.数组的大小是各维数的乘积*数组元素的大小。如:char a[] = "abcdef";
int b[20] = {3, 4};
char c[2][3] = {"aa", "bb"};
cout<<sizeof(a)<<endl; // 7
cout<<sizeof(b)<<endl; // 20*4
cout<<sizeof(c)<<endl; // 6
数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是7,包括‘/0’的。
6.字符串的sizeof和strlen,用例子说明:
char a[] = "abcdef";
char b[20] = "abcdef";
string s = "abcdef"; 
cout<<strlen(a)<<endl; // 6,字符串长度
cout<<sizeof(a)<<endl; // 7,字符串容量
cout<<strlen(b)<<endl; // 6,字符串长度
cout<<sizeof(b)<<endl; // 20,字符串容量
cout<<sizeof(s)<<endl; // 16, 这里不代表字符串的长度,而是string类的大小
cout<<strlen(s)<<endl; // 错误!s不是一个字符指针。 
a[1] = '/0';
cout<<strlen(a)<<endl; // 1
cout<<sizeof(a)<<endl; // 7,sizeof是恒定的

猜你喜欢

转载自blog.csdn.net/wangjingqi930330/article/details/80327334