http://dev.yesky.com/143/2563643.shtml
什么是sizeof
首先看一下sizeof在msdn上的定义:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子:
cout<<sizeof(int)<<endl; // 32位机上int长度为4
cout<<sizeof(1==2)<<endl; // == 操作符返回bool类型,相当于 cout<<sizeof(bool)<<endl;
在编译阶段已经被翻译为:
cout<<4<<endl;
cout<<1<<endl;
这里有个陷阱,看下面的程序:
int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为:
int a = 0;
cout<<4<<endl;
cout<<a<<endl;
所以,sizeof是不可能支持链式表达式的,这也是和一元操作符不一样的地方。
结论:不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。
1. sizeof 操作符的结果类型size_t,它在头文件中typedef为unsigned int类型: typedef unsigned int size_t.
2. sizeof是是长度运算符, 获得数据类型或是变量的长度,如果是数据类型,则返回数据类型大小,如果是用数组,则返回数组所占空间大小,strlen是计算字符串长度的函数,返回的是实际串长度,以char* 作参数 ,且必须是以'\0'结尾。
3. sizeof在编译的时候就把计算过,strlen的结果要在运行的时候才能计算出来。
4. 数组做长度运算符sizeof的参数不退化。数组做函数strlen的参数就退化为指针了,因为数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。
char* ss = "0123456789";
cout<<sizeof(ss)<<endl;//4
cout<<sizeof(*ss)<<endl;//1
cout<<strlen(ss)<<endl;//10
char ss1[] = "0123456789";
cout<<sizeof(ss1)<<endl;//11
cout<<sizeof(*ss1)<<endl;//1
cout<<strlen(ss1)<<endl;//10
char ss2[100] = "0123456789";
cout<<sizeof(ss2)<<endl;//100
char ss3[] = "0123456789\n";
cout<<sizeof(ss3)<<endl;//12
int n[4] = {1,2,3,4};
cout<<sizeof(n)<<endl;//16
int n1= 1234;
cout<<sizeof(n1)<<endl;//4
分享到:
相关推荐
主要讲解了sizeof的概念,以及各种情况下使用的方法,还有使用sizeof容易错误的地方,希望对大家有所帮助
cout<<sizeof(s1); // 24 cout<<sizeof(s2); // 16 同样是两个char类型,一个int类型,一个double类型,但是因为对界问题,导致他们的大小不同。计算结构体大小可以采用元素摆放法,我举例子说明一下:首先,CPU...
这个文章对C++中类的不同场景下sizeof的知识点的考察。 当然如果对C++ Object Model比较熟悉的话,这个知识点是小意思咯 :)
sizeof是C/C++中的一个操作符(operator),其作用是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对其有个全面的了解。 1.sizeof的基本语法 sizeof有三种语法形式。 (1)sizeof(object); //sizeof...
sizeof使用形式有三种:sizeof(var_name)或sizeof var_name或sizeof(var_type)。【例1】:(列子中忽略构造及析构函数) 代码如下:class A { public: void hello(){} }; sizeof(A)= 1;肯定不是零。举个反例,...
sizeof作用于基本数据类型,在特定的平台和特定的编译器中,结果是确定的,如果使用sizeof计算构造类型:结构体、联合体和类的大小时,情况稍微复杂一些。 1.sizeof计算结构体 考察如下代码: struct S1 { char c; ...
关于c/c++函数中sizeof的使用,以及使用过程中的一下细节注意
sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 .......
全面的sizeof知识与实践总结 有问题交流:jqb2@163.com
2.2.2 某32位系统下, C++程序,请计算sizeof 的值
数据结构 C++/C 面试题大全集共享 学习
1、定义与语法 2、语法形式 3、基本数据类型的sizeof值 4、指针变量的sizeof值 5、数组的sizeof值 6、结构体的sizeof值(★★★★★) 7、含位域结构体的sizeof
分析sizeof和strlen具体区别(源码和解析)
今天小编就为大家分享一篇关于C/C++中的sizeof运算符和size_t类型的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
const sizeof 预处理是C++的重点也是难点,很多大公司面试都喜欢考的题目。
c++ sizeof code. 关于c++笔试题中sizeof的例子
OK这里了:先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在 内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,空