如何在C++中打印已定义常量的内存地址
How to print memory address of a defined constant in C++
代码:
#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
。因此,该数字不驻留在内存中。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- 在定义的函数中使用常量时出错
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- C++ 确保子类为常量提供自定义值
- 用矩阵将函数中的整数值替换定义的常量
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 将字符串文本常量定义为 char const* 和 wchar const*
- 为什么不建议使用宏符号常量定义一个固定长度的数组呢
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 调用构造函数与将内联常量定义为默认参数
- 是否允许在常量定义的对象上丢弃 const 只要它没有实际被修改?
- 多个文件中的常量定义
- 常量定义和模板
- 如何在另一个命名空间中使用常量定义的外部
- 全局常量定义的顺序
- 将常量定义为函数会导致标头=坏主意
- 是一个宏,其变量总是用变量或常量定义