The New C++ -- 变量 (5. sizeof表达式,typeid表达式和地址操作符)
2012-02-10 12:29
302 查看
我们提到过变量名本身代表了变量的类型和变量的首地址,但这些只有编译器自己才知道。如果我们想在程序中知道每个变量名的类型,变量类型所占内存空间的大小和内存空间的首地址,我们可以通过sizeof表达式,typeid表达式和地址操作符来完成。
sizeof表达式和typeid表达式我们之前讲过,语法是sizeof(类型)和typeof(类型)。但sizeof和typeof除了后面跟数据类型的名字之外,也可以跟变量名,表示变量名所代表的变量的大小以及类型。例如,
要注意的是,sizeof跟变量名的时候可以有括号,也可以没有括号(但sizeof跟类型的时候必须有括号)。而typeid无论跟类型和变量名都必须有括号。
小知识:typeid表达式的返回结果是会忽略掉const的。虽然const int和int是不同的类型,但是typeid(const int)和typeof(int)的结果一样。有兴趣的读者可自己验证。在C++中,const类型和非const类型是不同的数据类型,但也有很多时候const会被忽略掉,typeid只是其中的一种情况,我会在以后的章节归纳总结这些情况。
要知道变量名所代表的变量的内存首地址,就要用到地址操作符,语法为"&变量名"。
&ul_var就表示编译器为ul_var自动预留的内存的首地址。
小知识:对于sizeof和typeof表达式来说,变量只需要被声明了就可以了(并不需要变量的定义),但是地址操作符因为需要内存的首地址,需要变量被定义。当我们需要读写一个变量的时候,也需要变量被定义。
sizeof表达式和typeid表达式我们之前讲过,语法是sizeof(类型)和typeof(类型)。但sizeof和typeof除了后面跟数据类型的名字之外,也可以跟变量名,表示变量名所代表的变量的大小以及类型。例如,
unsigned long ul_var = 0; float f_var = 0.0F; std::cout << typeid(ul_var).name() << " " << sizeof ul_var << std::endl; std::cout << typeid(f_var).name() << " " << sizeof(f_var) << std::endl;
要注意的是,sizeof跟变量名的时候可以有括号,也可以没有括号(但sizeof跟类型的时候必须有括号)。而typeid无论跟类型和变量名都必须有括号。
小知识:typeid表达式的返回结果是会忽略掉const的。虽然const int和int是不同的类型,但是typeid(const int)和typeof(int)的结果一样。有兴趣的读者可自己验证。在C++中,const类型和非const类型是不同的数据类型,但也有很多时候const会被忽略掉,typeid只是其中的一种情况,我会在以后的章节归纳总结这些情况。
要知道变量名所代表的变量的内存首地址,就要用到地址操作符,语法为"&变量名"。
unsigned long ul_var = 0; std::cout << std::hex << &ul_var << std::endl;
&ul_var就表示编译器为ul_var自动预留的内存的首地址。
小知识:对于sizeof和typeof表达式来说,变量只需要被声明了就可以了(并不需要变量的定义),但是地址操作符因为需要内存的首地址,需要变量被定义。当我们需要读写一个变量的时候,也需要变量被定义。
相关文章推荐
- The New C++ -- 基本数据类型和字面值常量 (3. sizeof表达式和typeid表达式)
- The New C++ -- 变量 (3. 变量的初始化)
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
- The New C++ -- 变量(4. const限定符和constexpr说明符 )
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- The New C++ -- 变量 (6. 变量名的声明点和作用域)
- C++内存布局(1)-让new出的两个变量在堆上的地址连续
- The New C++ -- 变量 (7. 左值,右值)
- 求变量的数据类型,typeid,bool,C和C++的不同,new和delete,C++中的枚举,inline和可变参数模板,auto和函数模板,宽字符
- The New C++ -- 变量(0)
- The New C++ -- 变量(1. 变量的声明和定义)
- c++中优化内存分配:new/delete操作符;allocator类对象的使用;operator new/operator delete函数及定位new表达式
- The New C++ -- 变量 (2. 变量的赋值和输入)
- c/c++ 中的 sizeof 运算符和数组类型的变量与形参
- C++中局部和全局变量的地址分配
- 你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算
- C++中delete, new以及new [], delete[]操作符内幕
- [导入]The New C++: 七人组-审议C++标准库扩展
- 浅析C++中sizeof操作符的用法
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量