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

时间:2012-11-23 20:53:58

标签: 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: error: non-lvalue in unary&amp;'中 make [2]: * [build / Debug / Cygwin-Windows / main.o]错误1 make [1]: [.build-conf]错误2 make:* * [.build-impl]错误2

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

谢谢。

4 个答案:

答案 0 :(得分:4)

从未为宏分配内存。在编译代码之前,编译器会在文件中进行文本搜索,并将所有宏替换为其值。这也是文本搜索,因此文本被替换。因此,在编译之前,PI会在代码中被3.14取代。结果,内存运算符抛出错误,因为它不能获得3.14的值,因为它不是变量。希望它有所帮助:)

答案 1 :(得分:3)

您无法获取数字文字的地址。但是你可以为一个变量:

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

答案 2 :(得分:3)

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

如果您将其变为变量,则可以获取其地址:

const double PI = 3.1415926;

答案 3 :(得分:1)

预处理器会在代码中的所有位置PI替换3.14159。因此,该号码不会驻留在内存中。