You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPP考试备考:如何获取变量地址及是否存在不可取地址的变量

关于C++中无法用&获取地址的变量

嘿,针对你备考CPP考试的这个问题,答案是肯定的——确实存在无法通过&运算符获取地址的变量,以下是C++标准明确规定的几类典型情况:

1. 用register关键字修饰的变量

register关键字的作用是提示编译器将变量优先存储在CPU寄存器中(不过现代编译器会根据优化策略自行决定是否遵循这个提示),但C++标准明确禁止对register修饰的变量使用&运算符,因为寄存器并不具备内存地址。

示例代码:

register int num = 42;
// # // 编译错误:无法获取register变量的地址

2. 结构体/类中的位域成员变量

位域是将一个或多个位打包到单个内存单元中的成员,由于它不是以完整的字节(或更大的内存单元)作为存储单元,因此无法获取位域成员的地址——C++标准不允许对这类变量使用&运算符。

示例代码:

struct DeviceStatus {
    unsigned int power_on : 1;  // 占1位的位域
    unsigned int battery_low : 1; // 占1位的位域
};

DeviceStatus status;
// &status.power_on; // 编译错误:无法获取位域成员的地址

3. 引用变量本身

引用是对象的别名,它并非独立的对象,因此没有自己的内存地址。当你对引用使用&运算符时,实际上获取的是它所绑定的原始对象的地址,而非引用本身的地址——换句话说,你永远无法获取引用变量自身的地址。

示例代码:

int original = 100;
int& ref = original;

cout << &ref;    // 输出的是&original的地址,而非ref本身的地址
// 不存在“获取ref自身地址”的语法,因为引用没有独立地址

需要额外注意的是:临时对象(比如int(5)这种)不是变量,所以不在你问题的讨论范围内;而普通的局部变量、全局变量、静态变量、动态分配的变量等,都可以正常用&获取地址。

内容的提问来源于stack exchange,提问作者Derek Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:31:14