`
fireDragonpzy
  • 浏览: 467570 次
  • 性别: 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使用规则及陷阱分析

    ### C++ `sizeof` 使用规则及陷阱分析 #### 一、`sizeof` 概念介绍 在C++中,`sizeof` 是一个关键字,用于获取变量或类型(包括聚合类型)所占用的存储空间大小(以字节为单位)。这个关键字返回一个 `size_t` ...

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

    总的来说,理解`sizeof`的使用和行为对于编写高效且内存管理得当的C++程序至关重要。在处理结构体或数组等复杂数据结构时,必须考虑到内存对齐的影响,这可能会导致实际占用的内存大于预期。同时,正确使用`sizeof`...

    C++面试-sizeof

    ### C++中的`sizeof`运算符与类大小 在C++编程语言中,`sizeof`运算符被广泛用于获取变量、类型或数据结构所占用的内存空间大小(以字节为单位)。对于基本数据类型来说,`sizeof`的计算相对简单直观;然而,当涉及...

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

    总结,`sizeof`是C和C++中非常有用的工具,它可以帮助开发者理解数据在内存中的布局,从而优化程序的性能和内存使用。理解和正确使用`sizeof`对于编写高效且内存友好的代码至关重要。在处理数组、结构体、联合体以及...

    C++的sizeof学习总结

    总的来说,理解`sizeof`运算符在C++中的工作原理是优化内存使用和提高程序效率的关键。在编写代码时,应该谨慎使用`sizeof`来检查和确认数据类型占用的空间,尤其是在跨平台开发时。同时,结合`#pragma pack`等工具...

    详解C++ sizeof(上)

    《详解C++ sizeof(上)》 `sizeof`是C++中一个非常重要的操作符,它的功能是返回一个对象或类型的内存占用字节数。掌握`sizeof`的使用对于理解和优化程序内存使用至关重要。 1. `sizeof`的基本语法 `sizeof`主要...

    C++ sizeof 实例解析

    在C++编程语言中,`sizeof`操作符用于获取类型或表达式的大小,通常以字节为单位。这个操作符非常实用,可以帮助开发者理解和优化内存使用。以下是对给定实例的详细解析: **例1**: ```cpp class A { public: ...

    sizeof和strlen区别

    在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的操作符,它们分别用于获取数据类型的大小和字符串的长度。然而,这两个操作符有着本质的区别,理解和掌握它们的区别对于编写高效且无误的代码至关重要。 ...

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

    在C++和C编程语言中,`sizeof`运算符是一个非常重要的知识点,它用于计算一个类型或变量在内存中占用的字节数。这个运算符对于理解和优化代码,特别是涉及数据结构和内存管理的部分,至关重要。下面我们将深入探讨`...

    sizeof函数使用注意事项

    了解并正确使用`sizeof`运算符是C/C++程序员的基本技能之一,它有助于优化内存使用、理解和调试代码,同时也能避免因不熟悉内存管理导致的潜在问题。在实际编程中,务必结合具体的平台和编译器环境来理解和应用这些...

    sizeof详细总结

    本文将对 sizeof 操作符进行详细的总结,包括其定义、语法形式、基本数据类型的 sizeof 值、指针变量的 sizeof 值、数组的 sizeof 值、结构体的 sizeof 值等。 定义和语法 sizeof 操作符的定义是:The sizeof ...

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

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

    sizeof 使用分析.doc

    总的来说,`sizeof`是C++中一个强大的工具,能够帮助开发者了解内存的使用情况,优化代码。然而,理解其工作原理和限制同样至关重要,以避免潜在的错误和误解。在实际编程中,应始终明确`sizeof`的作用对象,以确保...

    sizeof运算符的使用

    在C/C++编程语言中,`sizeof`运算符是一个非常重要的工具,用于获取任何数据类型或变量所占用的内存字节数。理解`sizeof`的使用对于优化代码、理解和预测程序内存消耗至关重要。以下是关于`sizeof`运算符的详细解释...

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

    C/C++中的sizeof运算符和size_t类型的详解 sizeof运算符是C/C++语言中的一种运算符,用于获取操作数被分配的内存空间,以字节为单位表示。它可以作用于变量、数据类型等,例如`sizeof a`或`sizeof(a)`,也可以作用...

    C++类的sizeof1

    在C++编程语言中,`sizeof`运算符用于计算类型或对象在内存中占用的字节数。在本文中,我们将深入探讨`sizeof`运算符在处理类时的一些细节,特别是涉及空类、非空类、虚函数以及继承时的情况。 1. **空类的sizeof**...

    C++ const sizeof

    ### C++ 中 `const` 和 `sizeof` 的深入解析 #### 一、预处理指令 `#define` 声明常数 1. **基本语法理解**:在C++中,`#define` 是预处理指令,用于声明常量。需要注意的是,这种声明**不以分号结尾**。此外,在...

Global site tag (gtag.js) - Google Analytics