c/c++语言开发共享char * argv 是什么意思?

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

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

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

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

 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 

    声明char *argv[]是一个指向char的指针的数组(大小不确定),换句话说是一个字符串数组。

    并且所有数组都衰减为指针,因此您可以使用数组作为指针(就像您可以将指针用作数组一样)。 所以*++argv首先增加“指针”以指向数组argv的下一个条目(这是第一次在循环中将是第一个命令行参数)并取消引用该指针。

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

     int main(int argc, char *argv[]) 

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

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

     int main(int argc, char *argv[]) { for(int i = 0; i < argc; i++) printf("%sn", argv[i]); for(int i = 0; i < argc; i++) printf("%sn", argv++); return 0; } 

    argv是一个char*数组。 执行++argv意味着访问数组的下一个单元格。 *表示我们想要单元格的值,而不是地址。

    参数声明看起来类似于数组的声明,但事实上(因为它是一个函数参数)它不是一个。 C FAQ很好地解释了这一点。

    argcargv是传递给程序主函数的参数。

    argc是一个保存参数个数的整数,而argc是一个指向保存实际参数的字符串数组的指针。

    这里做的是指针算法。

    指针并没有真正改变。

    使用指针的地址,临时递增,然后用于输出。

    因为operator +被放置在argv之前,所以首先获取地址,然后递增,然后取消引用以获取此地址后面的char *。

    但它不是地址本身,它会改变,只是偏移,从printf读取的位置。

    好 ?

    需要了解更多c/c++开发分享char * argv 是什么意思?,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享char * argv 是什么意思?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980248.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐