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

How to print memory address of a defined constant in C++

本文关键字:常量 定义 内存 地址 打印 C++      更新时间:2023-10-16

代码:

#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;
}

这是输出:

主.cpp:在函数中 int main(int, char**)': main.cpp:20: error: non-lvalue in unary &'make[2]: * [build/Debug/Cygwin-Windows/main.o] 错误 1make[1]: [.build-conf] 错误 2make: ** [.build-impl] 错误 2

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

谢谢。

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

在您的代码中,PI 没有内存地址。由于它是一个预处理器宏,因此它的值会在程序中出现PI任何地方被替换。

如果你把它变成一个变量,你可以取它的地址:

const double PI = 3.1415926;

不能采用数字文本的地址。不过,您可以为变量:

// #define PI 3.14159
static const double PI = 3.14159;

预处理器将通过代码中任何位置的3.14159替换PI。因此,该数字不驻留在内存中。