`
fireDragonpzy
  • 浏览: 444409 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

c++ sizeof使用

c++ 
阅读更多
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
分享到:
评论

相关推荐

    C++sizeof使用规则及陷阱分析

    主要讲解了sizeof的概念,以及各种情况下使用的方法,还有使用sizeof容易错误的地方,希望对大家有所帮助

    C++ sizeof 使用规则及陷阱分析

    cout&lt;&lt;sizeof(s1); // 24 cout&lt;&lt;sizeof(s2); // 16 同样是两个char类型,一个int类型,一个double类型,但是因为对界问题,导致他们的大小不同。计算结构体大小可以采用元素摆放法,我举例子说明一下:首先,CPU...

    C++面试-sizeof

    这个文章对C++中类的不同场景下sizeof的知识点的考察。 当然如果对C++ Object Model比较熟悉的话,这个知识点是小意思咯 :)

    详解C++ sizeof(上)

    sizeof是C/C++中的一个操作符(operator),其作用是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对其有个全面的了解。 1.sizeof的基本语法 sizeof有三种语法形式。 (1)sizeof(object); //sizeof...

    C++ sizeof 实例解析

    sizeof使用形式有三种:sizeof(var_name)或sizeof var_name或sizeof(var_type)。【例1】:(列子中忽略构造及析构函数) 代码如下:class A { public: void hello(){} }; sizeof(A)= 1;肯定不是零。举个反例,...

    详解C++ sizeof(下)

    sizeof作用于基本数据类型,在特定的平台和特定的编译器中,结果是确定的,如果使用sizeof计算构造类型:结构体、联合体和类的大小时,情况稍微复杂一些。 1.sizeof计算结构体 考察如下代码: struct S1 { char c; ...

    sizeof函数使用注意事项

    关于c/c++函数中sizeof的使用,以及使用过程中的一下细节注意

    sizeof 用法汇总 C和C++的语法

    sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 .......

    C++的sizeof学习总结

    全面的sizeof知识与实践总结 有问题交流:jqb2@163.com

    2.2.2 某32位系统下, C++程序,请计算sizeof 的值.md

    2.2.2 某32位系统下, C++程序,请计算sizeof 的值

    sizeof 数据结构 C++/C 面试题

    数据结构 C++/C 面试题大全集共享 学习

    sizeof详细总结

    1、定义与语法 2、语法形式 3、基本数据类型的sizeof值 4、指针变量的sizeof值 5、数组的sizeof值 6、结构体的sizeof值(★★★★★) 7、含位域结构体的sizeof

    sizeof和strlen区别

    分析sizeof和strlen具体区别(源码和解析)

    C/C++中的sizeof运算符和size_t类型的详解

    今天小编就为大家分享一篇关于C/C++中的sizeof运算符和size_t类型的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    C++ const sizeof

    const sizeof 预处理是C++的重点也是难点,很多大公司面试都喜欢考的题目。

    c++ size of code

    c++ sizeof code. 关于c++笔试题中sizeof的例子

    C++类的sizeof1

    OK这里了:先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在 内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,空

Global site tag (gtag.js) - Google Analytics