Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中“*variable”和“*variable[]”之间有什么区别?_C_Arrays_Char - Fatal编程技术网

C中“*variable”和“*variable[]”之间有什么区别?

C中“*variable”和“*variable[]”之间有什么区别?,c,arrays,char,C,Arrays,Char,在C编程语言中,我有两个不同版本的使用字符数组的代码 第一版: int main(int argc, char *argv[]) { return 0; } 第二版: int main(int argc, char *argv) { return 0; } 所有代码编译时都没有警告或错误,因此这些代码之间有什么区别?来自C标准5.1.2.2.1p1 1程序启动时调用的函数名为main。实现没有声明此函数的原型。它应定义为int返回类型,且无参数: int main(v

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

第一版:

int main(int argc, char *argv[]) {
    return 0;
}
第二版:

int main(int argc, char *argv) {
    return 0;
}

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

来自C标准5.1.2.2.1p1

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

    int main(void) { /* ... */ }
或者使用两个参数(此处称为argc和argv),尽管可以使用任何名称,因为它们是声明它们的函数的本地名称:

    int main(int argc, char *argv[]) { /* ... */ }
或同等品;10或以某种其他实现定义的方式

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

int main(int argc, char *argv) {
    return 0;
}
使用gcc编译器编译时,我收到以下错误消息:


prg.c:1:5:错误:“main”参数数组的第二个参数必须是c Standard5.1.2.2.1p1中的“char**”类型

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

    int main(void) { /* ... */ }
或者使用两个参数(此处称为argc和argv),尽管可以使用任何名称,因为它们是声明它们的函数的本地名称:

    int main(int argc, char *argv[]) { /* ... */ }
或同等品;10或以某种其他实现定义的方式

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

int main(int argc, char *argv) {
    return 0;
}
使用gcc编译器编译时,我收到以下错误消息:

prg.c:1:5:错误:“main”参数数组的第二个参数必须是“char**”类型。

对于main函数,最好将第二个参数argv定义为*argv[]或**argv

如果您的程序不处理任何命令行参数,则此参数将没有任何用处。但是如果您需要它,例如,ls-lR中的-lR字符串,您可能会注意到参数将变成一个二维字符数组,或者我们说是一个参数字符串数组。由于C中的字符串在不同的情况下可以是char*或char[],因此我们可以将二维字符数组表示为char*argv[]或char**argv

此外,如果使用gcc-Wall,第二个程序会产生警告,说main的第二个参数的类型应该是char**。

对于main函数,最好将第二个参数argv定义为*argv[]或**argv

如果您的程序不处理任何命令行参数,则此参数将没有任何用处。但是如果您需要它,例如,ls-lR中的-lR字符串,您可能会注意到参数将变成一个二维字符数组,或者我们说是一个参数字符串数组。由于C中的字符串在不同的情况下可以是char*或char[],因此我们可以将二维字符数组表示为char*argv[]或char**argv


此外,如果您使用gcc-Wall,第二个程序将产生警告,说明main的第二个参数的类型应为char**。

对于main函数,第一个参数正确,第二个参数不正确。请参阅其中还包括传入的参数以及返回类型。第一种情况下指向某些字符的指针与第二种情况下指向某些字符的指针之间存在差异。请注意,有些编译器会正确地抱怨第二种情况-这不是main的合法签名。第二个代码部分是错误的。我建议这样做。可能是一本关于指针和数组的好书或教程。第二本应该是char**argv。请参阅,请仔细检查您的问题是否有拼写错误。对于主功能,第一个是正确的,第二个是错误的。请参阅其中还包括传入的参数以及返回类型。第一种情况下指向某些字符的指针与第二种情况下指向某些字符的指针之间存在差异。请注意,有些编译器会正确地抱怨第二种情况-这不是main的合法签名。第二个代码部分是错误的。我建议这样做。可能是一本关于指针和数组的好书或教程。第二本应该是char**argv。请参阅,请仔细检查您的问题是否有拼写错误。由于C中的字符串在不同情况下可以是char或char[],因此我们可以将二维字符数组表示为char argv[]或char**argv-字符串始终是char,period的数组。您也可以使用char*指向第一个字符,因为数组在几乎所有上下文中都会衰减。但是char*argv[]和char**argv-变化的不是字符串而是数组。由于C中的字符串在不同的情况下可以是char或char[],因此我们可以将二维字符数组表示为char argv[]或char**argv-字符串始终是char,period的数组。您也可以使用char*指向第一个字符,因为数组在几乎所有上下文中都会衰减。但是char*argv[]和char**argv-改变的不是字符串而是数组。