char*argv []是什么意思?

aka*_*ash 13 c arrays pointers kernighan-and-ritchie

我是C编程的新手,我遇到了一个问题.
如果复杂的声明,我发现了这一点

int *daytab[13]; // daytab is an array of 13 pointers to int
Run Code Online (Sandbox Code Playgroud)

这意味着daytab是数组的名称,数组的名称指向数组的第一个元素.数组名称与像daytab++etc等指针操作不兼容(如果我错了,请纠正我).

但我发现这段代码是用Dennis Ritchie编写的

main(int argc, char * argv[]) {
    while( --argc > 0 )                    
        printf("%s%s",*++argv,(argc>1) > " " : "");

    printf("\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

他们怎么操纵argv?它不是数组名称吗?

Pau*_*l R 20

参数 char * argv[]衰减到一个指针,char ** argv.您也可以将函数签名写main()为:

int main(int argc, char ** argv)
Run Code Online (Sandbox Code Playgroud)

您可以使用指针argv在内部执行您喜欢的操作main(),因此argv++例如只是argv指向argv[1]而不是指向argv[0].

argv ---> argv[0] ---> "program"
          argv[1] ---> "arg1"
          argv[2] ---> "arg2"
           ...          ...
          argv[argc] == NULL
Run Code Online (Sandbox Code Playgroud)

  • char argv []表示单个字符串,char * argv []表示多个字符串。 (2认同)
  • @BobJarvis是的,谢谢我的意思是`argv [argc] ---> NULL`,`argv`是*strings*的数组以NULL结尾. (2认同)

Dev*_*lus 5

当程序启动时,它会在主函数中获取其参数。这就是你通常写作的原因。

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

这仅仅意味着 argv 是一个指向 argc (== 参数计数)所指示的参数字符串的指针。由于 argv 衰减为 char **argv 您也可以增加它,或者像指针一样。

因此,如果您想从命令行打印所有参数:

int main(int argc, char *argv[])
{
   for(int i = 0; i < argc; i++)
       printf("%s\n", argv[i]);

   for(int i = 0; i < argc; i++)
       printf("%s\n", argv++);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


ibi*_*tux 5

argv是一个数组char*。做++argv意味着访问数组的下一个单元格。该*指示我们想要的细胞,而不是地址的值。