【发布时间】:2021-04-08 03:24:46
【问题描述】:
我一直在自学 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* 究竟是什么?
【问题讨论】:
-
我强烈建议不要尝试同时学习两种语言。它们是不同的语言,但也非常相似,以至于您最终会过度混淆自己。
-
指针类型可以用数组初始化。在 C 和 C++ 中。字符串文字
"Hello"是一个字符数组。您的指针变量x指向第一个数组元素。此外,在 C++ 中,我们不需要使用void来表示函数不接受任何参数。一个简单的int main() {}签名就可以了。 -
x包含字符串文字"Hello"的第一个字符的地址。输出流的operator<<()有多个重载。一个接受const char *参数,该参数将在该地址输出字符,直到它到达 nul 字符(打印Hello)。另一个重载接受void *参数并输出(表示)实际地址。如果您执行std::cout << (void *)x,它将调用接受void *的operator<<()重载,并因此打印x中包含的地址(与&x的值不同)。