The New C++ -- 变量 (5. sizeof表达式,typeid表达式和地址操作符)


我们提到过变量名本身代表了变量的类型和变量的首地址,但这些只有编译器自己才知道。如果我们想在程序中知道每个变量名的类型,变量类型所占内存空间的大小和内存空间的首地址,我们可以通过sizeof表达式,typeid表达式和地址操作符来完成。

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表达式来说,变量只需要被声明了就可以了(并不需要变量的定义),但是地址操作符因为需要内存的首地址,需要变量被定义。当我们需要读写一个变量的时候,也需要变量被定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值