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` 概念介绍 在C++中,`sizeof` 是一个关键字,用于获取变量或类型(包括聚合类型)所占用的存储空间大小(以字节为单位)。这个关键字返回一个 `size_t` ...
总的来说,理解`sizeof`的使用和行为对于编写高效且内存管理得当的C++程序至关重要。在处理结构体或数组等复杂数据结构时,必须考虑到内存对齐的影响,这可能会导致实际占用的内存大于预期。同时,正确使用`sizeof`...
### C++中的`sizeof`运算符与类大小 在C++编程语言中,`sizeof`运算符被广泛用于获取变量、类型或数据结构所占用的内存空间大小(以字节为单位)。对于基本数据类型来说,`sizeof`的计算相对简单直观;然而,当涉及...
总结,`sizeof`是C和C++中非常有用的工具,它可以帮助开发者理解数据在内存中的布局,从而优化程序的性能和内存使用。理解和正确使用`sizeof`对于编写高效且内存友好的代码至关重要。在处理数组、结构体、联合体以及...
总的来说,理解`sizeof`运算符在C++中的工作原理是优化内存使用和提高程序效率的关键。在编写代码时,应该谨慎使用`sizeof`来检查和确认数据类型占用的空间,尤其是在跨平台开发时。同时,结合`#pragma pack`等工具...
《详解C++ sizeof(上)》 `sizeof`是C++中一个非常重要的操作符,它的功能是返回一个对象或类型的内存占用字节数。掌握`sizeof`的使用对于理解和优化程序内存使用至关重要。 1. `sizeof`的基本语法 `sizeof`主要...
在C++编程语言中,`sizeof`操作符用于获取类型或表达式的大小,通常以字节为单位。这个操作符非常实用,可以帮助开发者理解和优化内存使用。以下是对给定实例的详细解析: **例1**: ```cpp class A { public: ...
在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的操作符,它们分别用于获取数据类型的大小和字符串的长度。然而,这两个操作符有着本质的区别,理解和掌握它们的区别对于编写高效且无误的代码至关重要。 ...
在C++和C编程语言中,`sizeof`运算符是一个非常重要的知识点,它用于计算一个类型或变量在内存中占用的字节数。这个运算符对于理解和优化代码,特别是涉及数据结构和内存管理的部分,至关重要。下面我们将深入探讨`...
了解并正确使用`sizeof`运算符是C/C++程序员的基本技能之一,它有助于优化内存使用、理解和调试代码,同时也能避免因不熟悉内存管理导致的潜在问题。在实际编程中,务必结合具体的平台和编译器环境来理解和应用这些...
本文将对 sizeof 操作符进行详细的总结,包括其定义、语法形式、基本数据类型的 sizeof 值、指针变量的 sizeof 值、数组的 sizeof 值、结构体的 sizeof 值等。 定义和语法 sizeof 操作符的定义是:The sizeof ...
2.2.2 某32位系统下, C++程序,请计算sizeof 的值
总的来说,`sizeof`是C++中一个强大的工具,能够帮助开发者了解内存的使用情况,优化代码。然而,理解其工作原理和限制同样至关重要,以避免潜在的错误和误解。在实际编程中,应始终明确`sizeof`的作用对象,以确保...
### 详细讲解 `sizeof` 的使用 #### 一、`sizeof` 概念解析 `sizeof` 是 C 语言中的一个单目操作符,用于获取指定类型或变量的存储大小,单位为字节。它不同于普通的函数调用,而是直接在编译阶段就被解析。 ####...
在C/C++编程语言中,`sizeof`运算符是一个非常重要的工具,用于获取任何数据类型或变量所占用的内存字节数。理解`sizeof`的使用对于优化代码、理解和预测程序内存消耗至关重要。以下是关于`sizeof`运算符的详细解释...
C/C++中的sizeof运算符和size_t类型的详解 sizeof运算符是C/C++语言中的一种运算符,用于获取操作数被分配的内存空间,以字节为单位表示。它可以作用于变量、数据类型等,例如`sizeof a`或`sizeof(a)`,也可以作用...
在C++编程语言中,`sizeof`运算符用于计算类型或对象在内存中占用的字节数。在本文中,我们将深入探讨`sizeof`运算符在处理类时的一些细节,特别是涉及空类、非空类、虚函数以及继承时的情况。 1. **空类的sizeof**...
### C++ 中 `const` 和 `sizeof` 的深入解析 #### 一、预处理指令 `#define` 声明常数 1. **基本语法理解**:在C++中,`#define` 是预处理指令,用于声明常量。需要注意的是,这种声明**不以分号结尾**。此外,在...