代码:
#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的内存地址?
谢谢。
答案 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
。因此,该号码不会驻留在内存中。