c - char * argv[] 是什么意思?

标签 c arrays pointers kernighan-and-ritchie

我是 C 编程的新手,我遇到了一个问题。
对于复杂的声明,我发现了这个

int *daytab[13]; // daytab is an array of 13 pointers to int

表示daytab是数组名,数组名指向数组的第一个元素。数组名称与 daytab++ 等指针操作不兼容(如果我错了请纠正我)。

但我发现这段代码是丹尼斯里奇写的

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

    printf("\n");
    return 0;
}

他们如何操纵argv?不是数组名吗?

最佳答案

参数 char * argv[] 衰减为指针,char ** argv。您同样可以将 main() 的函数签名编写为:

int main(int argc, char ** argv)

你可以在 main() 中用指针 argv 做你喜欢的事,所以 argv++ 例如只是颠簸 argv 指向 argv[1] 而不是 argv[0]

argv ---> argv[0] ---> "program"
          argv[1] ---> "arg1"
          argv[2] ---> "arg2"
           ...          ...
          argv[argc] == NULL

关于c - char * argv[] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16666353/

相关文章:

c - 与指针比较数组末尾后的一个元素是否定义明确?

c - realloc ANSI C 上的段错误

c - 如何修复 copy_from_user 不起作用?

c - 使用 poll() 运行一个简单的 TCP 服务器,如何触发事件 "artificially"?

c - Scanf 总是跳过第二行输入

c - 为什么数组的第一个元素等于数组?C

c - 在这种情况下,char[] 和 char* 有何不同?

c - 在 C 中使用 exit()

javascript - 使用 Select 的带有 ngModel 的 Angular *ngFor 具有意外的绑定(bind)

arrays - 如何在单行上打印 bash 数组的输出