sizeof操作符用于获得一个表达式的类型的大小,表达式可以是一个运算式、变量或类型,当sizeof后面是单个标识符时,不需要括号。如果sizeof表达式作为整个表达式的一部分时最好使用括号,除非你很清楚各运算符的优选级。sizeof的优先级是一元运算符中最低的,但高于所有二元运算符。使用sizeof获得C++内置类型的值可能为(不同CPU、不同编译器都可能不同):
数据类型 | sizeof | 备注 |
bool | 1 | 一般都是1,尚未发现不为1的编译器 |
char unsigned char signed char | 1 | C++标准定义 |
short [int] unsigned short [int] shigned short [int] | 2 | C++标准规定至少为不比char小,绝大多数编译器都是2,尚未发现有编译器为其它值 |
int unsigned int signed int | 1,2,4,8 | 不同CPU不同,8位单片机可能为1(可能会有编译器选项设为4);16位单片机为2(可能有编译器选项改为4);32位CPU一般为4,64位CPU多数编译器也默认为4,可能有编译选项设为8 |
long [int] unsigned long [int] signed long [int] | 4, 8 | C++标准规定至少为4,但绝大多数编译器也都是4,但有些编译器提供了编译选项,可以设为8 |
long long [int] unsigned long long [int] | 4, 8 | 一般为8,但在一些嵌入式设备的编译器中可能只支持到4个字节的精度 |
float | 4 | 绝大多数编译器都实现为4个字节的精度 |
double | 4,8 | 绝大多数编译器都实现为8个字节的精度,但有些嵌入式编译器可能只支持4个字节 |
long double | 4, 8, 12 | 一般为12,但有些编译器特别是嵌入式编译器可能只支持8字节精度,甚至只支持4字节精度 |
void*, char*, short*, int* , boo*, long*, long long*, float*, double*, long double* | 2,4,8 | 在8、16位单片机上为2,在32位机上为4,在64位机上为64 |
enum | 4,8 | 一般为4,但有的编译器可以支持enum的值定义为long long型扩展到8字节(如VC++ 2010、gcc 4.3.4),有的编译器严格检查定义的值,超过4字节时则给出编译错误(如C++Builder 2010),C++标准并没有规定具体大小。 |
合更地使用sizeof可以更好的提高软件的易维护性,例如下面的代码,当我们添加或删除数组中的元素时for循环里的循环条件无需修改。
char* arr[] = {"str1", "str2", "str3", "str4"};
for(int i=0; i<sizeof><p>cout </p>
<p>} </p> <h5>
<a>1.1.2. 代替strlen</a>检测字符串常量的长度</h5> <p>如果您在编译期就可以确定字符串常量的长度,请使用sizeof,不要使用strlen,如代码1-?所示。但这里只能用于求字符串常量的值,sizeof( )的表达式不能是char*类型,否则就成了指针的大小了,而不是指向的字符串。 </p> <p>// 代码1-7 </p> <p>#include <iostream></iostream></p> <p>#define static_strlen(str) (sizeof(str)-1) </p> <p>int main( void ) </p> <p>{ </p> <p>#define HELLO "Hello" </p> <p>std::size_t len = static_strlen("Hello") ; </p> <p>std::cout </p>
<p>return 0; </p> <p>} </p> <h5>1.1.3. 数组</h5> <p>当sizeof操作符作用于数组上时,返回的时数组元素的个数乘以元素的大小,例如 </p> <p>char carr[5]; // sizeof(carr) = 5 </p> <p>short* sarr[10]; // sizeof(sarr) = 20 </p> <p>但是,当数组作为函数的参数时,其实是按指针传递的,在函数内使用sizeof作用于参数时,得到的是指针的值,如: </p> <p>void func( char arr[20], int len) </p> <p>{ </p> <p>cout </p>
<p>} </p> <p>所以,在参数为数组时,一般都会有另外一个参数,传递数组中包含元素的个数,否则函数体内不知道传递的实参包含元素的个数。有时也可以通过特殊元素作为结束符,例如对于字符串数组,可以将第一个字符为’/0’的空字符串表示整个数组的结束。 </p>
</sizeof>
分享到:
相关推荐
sizeof操作符以字节形式给出了其操作数的存储大小。sizeof使用形式有三种:sizeof(var_name)或sizeof var_name或sizeof(var_type)。【例1】:(列子中忽略构造及析构函数) 代码如下:class A { public: void ...
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中: char的sizeof值为1,char是我们编程能用的...
sizeof是C/C++中的一个操作符(operator),其作用是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对其有个全面的了解。 1.sizeof的基本语法 sizeof有三种语法形式。 (1)sizeof(object); //sizeof...
sizeof是c的运算符之一,用于获取操作数被分配的内存空间,以字节单位表示. 这里指的操作数,可以是变量,也可以是数据类型,如int,float等.所以就可以通过它来获取本地c库定义的基本类型的范围。 sizeof的使用 1.对于...
1.操作符重载对大部分符号成立,一下几种不能重载:” . “, ” .* “, “ :: “, ” ?: “, ” sizeof “。 2.操作符重载分为 成员...如果操作符重载函数中需要访问形参类的私有成员,则需要把它说明成相应类的友元。
5.8 sizeof操作符 144 5.9 逗号操作符 145 5.10 复合表达式的求值 145 5.10.1 优先级 145 5.10.2 结合性 146 5.10.3 求值顺序 148 5.11 new和delete表达式 150 5.12 类型转换 154 5.12.1 何时发生隐式类型转换 154 ...
优先级 操作符 描述 例子 结合性 1 () [] -> . :: ++ -- 调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作...
5.8 sizeof操作符 5.9 逗号操作符 5.10 复合表达式的求值 5.10.1 优先级 5.10.2 结合性 5.10.3 求值顺序 5.11 new和delete表达式 5.12 类型转换 5.12.1 何时发生隐式类型转换 5.12.2 算术转换 5.12.3 其他...
5.8 sizeof操作符 5.9 逗号操作符 5.10 复合表达式的求值 5.11 new和delete表达式 5.12 类型转换 小结 术语 第6章 语句 6.1 简单语句 6.2 声明语句 6.3 复合语句(块) 6.4 ...
5.8 sizeof操作符 5.9 逗号操作符 5.10 复合表达式的求值 5.11 new和delete表达式 5.12 类型转换 小结 术语 第6章 语句 6.1 简单语句 6.2 声明语句 6.3 复合语句(块) 6.4 ...
(1)new、delete是操作符,可以重载,只能在C++中使用。 (2)malloc、free是函数,可以覆盖,C、C++中都可以使用。 (3)new可以调用对象的构造函数,对应的delete调用相应的析构函数。 (4)malloc仅仅分配...
sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:void *malloc(sizex_t size), size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)
252.4 宏__cplusplus 262.5 静态断言 272.5.1 断言:运行时与预处理时 272.5.2 静态断言与static_assert 282.6 noexcept修饰符与noexcept操作符 322.7 快速初始化成员变量 362.8 非静态成员的sizeof 392.9 扩展的...
C语言中操作符的优先级大全, 当然c++, Objective-C,大部分语言都试用。 下面是来自The C Programming Language 2th的总结。 OperatorsAssociativity(结合性) 1. () [] -> . 左->右 2. ! ~ ++ -- + - *(type)...
属于学习C++的附加内容,本文主要讲解了sizeof 操作符,预处理器,#define,RTTI 与typid 的作用与使用方法, 对于需要了解这方面内容的读者可以参考之。
#pragam.txt #pragma预处理指令的用法.pdf 常用ASCII编码.pdf VC++小游戏开发实例教程.chm sizeof.doc C++的忠告.doc C++初始化成员列表.doc c_c++中操作符的优先级.doc
代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存...
java基础课件ppt与上机练习题....所有的数据类型所占用的字节数都是固定的,并且和实现无关,因此在Java中没有sizeof操作符。 不必死记这些关键词,当理解每个关键词的含义后,自然就记住了所有的关键词。
sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义
2.3.6 ISO/ANSI C++中的基本类型 2.3.7 字面值 2.3.8 定义数据类型的同义词 2.3.9 具有特定值集的变量 2.3.10 指定枚举常量的类型 2.4 基本的输入输出操作 2.4.1 从键盘输入 2.4.2 到命令行的输出 2.4.3 格式化输出 ...