关于char的指针数组

bab*_*bon 3 c arrays pointers

我理解为什么这不起作用:

int main(int argc, char *argv[]) {
    char *names[] = {"name1", "name2", "name3", "name4"};
    int i = 0;
    while (i++ <= 3) {
        printf("%s\n", *names++);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

a.c: In function 'main':
a.c:16: error: wrong type argument to increment
shell returned 1
Run Code Online (Sandbox Code Playgroud)

这是因为我试图增加一个数组变量(而不是一个指针).请不要介意错误消息中的行号,我在上面和下面列出了很多注释代码.

但是,我不明白为什么这段代码有效:

void myfunc(char *names[]) {
    int i = 0;
    while (i++ <= 3) {
        printf("%s\n", *names++);
    }
}


int main(int argc, char *argv[]) {
    char *names[] = {"name1", "name2", "name3", "name4"};
    myfunc(names);
}
Run Code Online (Sandbox Code Playgroud)

我们怎样才能增加namesmyfunc()?它仍然是一个本地数组变量myfunc().有人可以帮忙吗?

谢谢.

alk*_*alk 5

在1 例子names是一个数组.数组不能递增.

第二个例子中names是一个指针.指针可以递增.

为什么第二个例子编译的背景:

[]函数声明中的变量定义中的A 与(另一个)相同*.

所以这

void myfunc(char * names[]);
Run Code Online (Sandbox Code Playgroud)

相当于

void myfunc(char ** names);
Run Code Online (Sandbox Code Playgroud)

后者很明显这里names不是数组而是指针.