c++ - char* 不保存内存地址

标签 c++ string pointers

我一直在自学 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/

相关文章:

c++ - 使用指向基类的指针时的默认析构函数

c++ - mkdir 和 ofstream 的问题

c - 访问指向字符串的指针数组

c++ - 带 API 的实时频谱分析仪

c++ - 模板推导趣事,c++

java - 在 Java 中对字符串进行一组更改 - 最佳实践方法

javascript - 如何使用正则表达式匹配多个值返回单个值?

android - 使用 strings.xml 中的文本和值填充 ListView

c - 当 printf 是变量的地址时,为什么要使用 void*?

C - 为函数内的双指针赋值