我一直在自学 C 和 C++,对指针有些熟悉。我的主要问题是 const char* 实际上存储内存地址吗? 这个问题是在处理字符串时出现的。如何将字符串分配给应该保存内存地址的内容?
#include <iostream>
int main(void) {
const char* x = "Hello";
std::cout << x << std::endl; // Returns Hello
std::cout << &x << std::endl; // Returns the actual address
}
据我所知,上面的代码应该打印一个内存地址,那么char*实际上是什么?
最佳答案
char*
实际上存储了一个地址。当您分配常量字符串时,C++ 将该常量字符串放在方便的位置(可能在可执行文件的 .DATA
部分),并将指向它的指针存储在变量 x
中。特别是,这是常量字符串是 const 的原因之一。 const char*
指向的文本字符串可以在代码中的其他位置使用。
请注意,cout
在打印字符数组时具有特殊行为。当你执行&x
时,你实际上获得了局部变量的地址,即const char**
类型的东西。如果您想要字符串的实际地址,可以使用 (void*)x
来抑制通常的字符串打印行为。
关于c++ - char* 不保存内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65527035/