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)
当程序启动时,它会在主函数中获取其参数。这就是你通常写作的原因。
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)