main函数参数指针问题

main函数二级指针问题
#include

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

return 0;

}

img

为什么main中定义了 char *argv二级指针,而通过argv[i]得到的就是内容,argv[i]=(argv+1),c此时指向的不是仍为一级指针的地址吗?

不是应该*argv[i]才能指向内容吗?

你需要理解你存储的最小单元是什么呀。你打印用的都是%s,直接打印的字符串呀。那么它下一级是不是就是字符了,如此*argv[0]就是指向路径字符串中的字符了。
二级指针也可以等价为二维数组,那么你上面的打印就是打印二维数组内的的每一个字符串呀就是内容,如果带星号了,还要去索引argv[i][j]每一个字符对应得脚标/位置。
你理解得地址,实际上二维数组内存上指向自己得一个首地址,那么直接取argv则是地址值。

但是它指向的是是数组啊,数组名的首地址实质上是一个指针。因此可以进行相等运算
argv=argv[0]
argv是类型为char,指向char的指针
argv也是类型为char
,指向char的指针。

argc 代码参数个数,这个没问题的吧?
那么,我问你,

char *p

这个是什么意思?可不可以表示字符数组或者字符串?所有的数组由char 类型组成?*p 表示字符串中的一个字符?
ok,来看

char**p

这个是什么意思?相当于用char* 组成的数组,也就是字符二维数组,或者称为字符串数组?
同理,char **argv,是不是表示字符串数组?
argv[0] 表示字符串数组的第一个字符串