char** 是 C 中指向字符串数组的指针吗?

Mut*_*thm 0 c arrays pointers

根据我的理解,char* X是C中指向单个字符或字符数组(字符串)的变量。

char**是一个指向另一个指针的指针,该指针最终指向单个字符或字符数组。

ifint**相当于创建多维数组,为什么我不能使用 C 创建字符串数组char**

const char** day = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
};
Run Code Online (Sandbox Code Playgroud)

这里*day会指向数组本身并**day会指向数组的第一个元素“Sunday”?

Ach*_*hal 6

为什么我不能使用 char** 在 C 中创建字符串数组?是的,你可以创造。正确的方法是使用char 指针数组而不是像您那样使用双char**指针。例如

const char* day[7] = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
};
Run Code Online (Sandbox Code Playgroud)

上面day字符指针数组,它的每个元素都是字符指针,每个元素都需要指向有效地址。这day[0]是字符指针及其指向sunday有效地址的字符串文字。

也可以通过char**但不是像你那样的方式。例如

char **day = {"sunday", "Monday" };
Run Code Online (Sandbox Code Playgroud)

这里的问题是您没有为 分配内存day[0]day[1]保存一些字符串文字,例如sunday& 等。

首先分配内存day如下

char **day = malloc(NUM_OF_DAYS * sizeof(*day)); /* define NUM_OF_DAYS as 7 */
Run Code Online (Sandbox Code Playgroud)

然后为等分配内存day[0]day[1]

for(int index =0 ; index < NUM_OF_DAYS; index++) {
   day[index] = malloc(MAX_DAY_SIZE * sizeof(**day)); /* define this MACRO */
}
Run Code Online (Sandbox Code Playgroud)

然后在运行时扫描数据。