c++ - 在 C++ 中使用指向 char 数组的指针

标签 c++ arrays pointers

我是编码方面的新手,在理解指针如何与数组结合使用时遇到一些问题(我自己理解数组)。

我知道可以创建一个指针数组,例如:

#include <iostream>
using namespace std;

int main() {
    int i;
    int *pArr[10];
    pArr[0]=&i;
    return 0;
}

然后我在教程中找到了以下代码:

#include <iostream>
using namespace std;

int main() {
    char *names[4] = {
        "name A",
        "name B",
        "name C",
        "name D"
};

for (int i = 0; i < 4; i++) {
    cout << names[i] << endl;
}
return 0;
}

为什么我可以分配多个字符,或者说一个字符串,比如“name A”到一个应该指向一个字符的指针。

我不应该:

只能将 char 的地址分配给我创建的那 4 个指针中的每一个。

和乙:

只能为每个字母分配一个指针(一个字符)。

我希望有人能在一定程度上帮助解决我的困惑。

最佳答案

这是编译器提供的一种快捷方式,使程序员可以更轻松地在代码中包含字符串。

当您编写字符串文字 "name A" 时,编译器会为您准备一个七字符数组:

const char hidden0[] = {110, 97, 109, 101, 32, 65, 0}; // "name A"

前六个数字对应字符串中符号的字符代码。最后一个字符为零 - 即所谓的空终止符。

编译器对所有四个字符串文字执行相同的操作,因此您的数组初始值设定项如下所示:

const char *names[4] = {
    &hidden0[0],
    &hidden1[0],
    &hidden2[0],
    &hidden3[0]
};

hiddenK 是为相应的字符串文字创建的数组。它没有名字,但编译器知道它的地址,并将它放在 name[] 数组中。

关于c++ - 在 C++ 中使用指向 char 数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594379/

相关文章:

c - 有一个带有指针和 char 返回值的 C 函数,它只返回 char 值和 0 到指针

c++ - 保存 wxWidgets 窗口截图

c++ - 使用 gSOAP 解析 soap 消息

c++ - MySQL 中数据对象的 UID

c++ - 当我在结构中包含多个数组时,我的程序跳过了一堆代码

java - 如何将用户输入的整数插入到数组中?

C# 如何创建和初始化 ValueTuples 的静态数组?

c++ - 不同平面上的多边形之间的三角剖分

c - 初始化指向整数的指针数组

C++ 指向指针范围问题的指针