0

代码:

#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&' make[2]: * [build/Debug/Cygwin-Windows/main.o] 错误 1 ​​make[1]:[.build-conf] 错误 2 make: * * [.build-impl] 错误 2

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

谢谢你。

4

4 回答 4

4

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

于 2012-11-23T21:55:29.030 回答
3

您不能获取数字文字的地址。但是,您可以使用变量:

// #define PI 3.14159
static const double PI = 3.14159;
于 2012-11-23T20:55:03.713 回答
3

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

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

const double PI = 3.1415926;
于 2012-11-23T20:56:01.577 回答
1

预处理器将替换代码中PI3.14159任何地方。因此,该数字不驻留在内存中。

于 2012-11-23T20:56:02.157 回答