刚学c语言 main函数中基本上传的是空 但是 在好多工程中 会有参数 常见的就是int main(int arg,char **argv)

所以要测试一下 这两个参数有什么意义

#include <stdio.h>
int main(int arg,char **argv)
{
    printf("arg is %d\n",arg);
    printf("&argv is %d\n",&argv);
    printf("argv is %d\n",argv);
    for (int i = 0;i < arg;i++)
        printf("argv[%d]'s address is %d \t argv[%d] point to address is %d \t argv[%d] is %s\n",i,&argv[i],i,argv+i,i,*(argv+i));
    for (int i = 0;i < 7; i++)
    {
        printf("argv[0][%d] value is %c\n",i,argv[0][i]);
        printf("argv[0][%d]'s address is %d\n",i,&argv[0][i]);
    }
    printf("**argv is %c \n",**argv);
}

运行结果:

可以看出 arg表示的是命令行的字符串个数 其中每个字符串由空格隔开着的 这个大致应该能猜出是这两个参数大致有啥用的了 命令行!

我们输入命令行 比如 rm -rf a.out 我们常用的命令行是可以有多个参数的 这就需要main函数需要可以传参 用来解析命令行

如果main函数里是空的话 那这个默认编译为a.out文件的话 这个运行的话 只可以./a.out 不可以传参

值的注意的是:

通过argv可以指向多个字符串,其中argv[i]存的是每个字符串的首地址

argv 自己的地址 -2029726352 存的数据是-2029726072 也就是指向这个地址 也就是&argv[0] 的地址

其实还可以发现 argv[0] 和 &argv[0] 值都一样

**argv 也就是argv[0][0] 就是第一个字符串的第一个字符。

argv 指向 argv[0]的地址 argv[0]指向第一个字符串的地址

其中 argv[i] 地址连续的 argv[0][j] 地址是连续的

 

posted on 2022-01-04 13:06  Rabbit_XIN  阅读(220)  评论(0)    收藏  举报