c++ - 如何在 C++ 中打印已定义常量的内存地址

标签 c++ constants memory-address

代码:

#include <cstdlib>
#include <iostream>
#define PI 3.14159

using namespace std;

int main(int argc, char** argv) {    
    cout<<"Address of PI:"<<&PI<<endl;    
    return 0;
}

这是输出:

main.cpp: 在函数 int main(int, char**)' 中: main.cpp:20: 错误:一元中的非左值&' make[2]: * [build/Debug/Cygwin-Windows/main.o] 错误 1 make[1]: [.build-conf] 错误 2 make: ** [.build-impl] 错误 2

那为什么我这里看不到PI的内存地址呢?

谢谢。

最佳答案

宏永远不会分配内存。在编译代码之前,编译器在文件中进行文本搜索,并用它们的值替换所有宏。这也是一个文本搜索,因此文本会被替换。因此在编译之前,PI 在您的代码中被替换为 3.14。结果,内存运算符抛出错误,因为它无法获取 3.14 的值,因为它不是变量。希望对您有所帮助:)

关于c++ - 如何在 C++ 中打印已定义常量的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535613/

相关文章:

c++ - Qt 中的视频流

c++ - 比较三个 float 时的双重不等式

Swift:防止玩家地址跟踪

assembly - 在没有分页的32位模式下,如何计算物理地址?

c++ - '*(<type> *) &x' 和 'x' 有什么区别?

c++ - 带有(不需要的)额外空间的 Qt 5.12 菜单项

c++ - dlopen、工厂模式和虚方法表

c++ - 尝试使用 const int std::array 时出错

iphone - iPhone:UI元素的坐标和大小的常量吗?

c++ - 我可以在 C++ 运行时初始化静态 const 成员吗?