C中"*variable"和"*variable []"有什么区别?

Wol*_*337 2 c arrays char

我在C编程语言中使用char数组有两个不同版本的代码.

第一版:

int main(int argc, char *argv[]) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第二版:

int main(int argc, char *argv) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所有代码编译时没有警告或错误,所以这些代码之间有什么区别?

H.S*_*.S. 5

来自C标准#5.1.2.2.1p1

1程序启动时调用的函数名为main.该实现声明此函数没有原型.它应该使用int的返回类型定义,并且没有参数:

    int main(void) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

或者有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):

    int main(int argc, char *argv[]) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

等价物; 10)或其他一些实施定义的方式.

根据标准,您的第二个版本不正确:

int main(int argc, char *argv) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用编译gcc器编译时,我收到以下错误消息:

prg.c:1:5: error: second parameter of 'main' (argument array) must be of type 'char **'