189 8069 5689

如何通透理解c语言中的**argv(*argv[])?-创新互联

1 指针的底层含义

指针 = 指向地址的针 = 存放地址的地址

我们提供的服务有:成都网站建设、网站制作、微信公众号开发、网站优化、网站认证、锦屏ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的锦屏网站制作公司
int i = 1;
int* p = &i;

从上面的代码可以理解:
定义了一个int型变量i,这个i是变量的名字,1是变量的值,那么变量存在的地方就是地址(假设为0xf7bc),代表一块内存,所以地址为0xf7bc的内存上存放着值1。
定义了一个int型指针p,这个p是指针的名字,&i是指针的值,同样,指针的存放也需要一块内存,当然这个指针p也有地址(假设为0xf7d2),那么它的值就是0xf7bc,所以地址为0xf7d2的内存上存放着值0xf7bc!
通过对比可以发现,好像指针和变量这两者的存在方式区别不大?
只不过指针存放的值是地址罢了。

2 函数形参中的*arg

比如在strcpy函数中,函数原型为:char *strcpy(char *dest, const char *src);
一般我们简单使用起来是这样用的:

char str[] = "hello";
strcpy(str, "world!");

有没有发现函数形参const charsrc是一个指针,但是我们实际传进去的是一个字符串呢?
我们知道字符串实际是以字符数组的形式存在的,我们传进去的“world!”是怎么作为指针的呢?
答案是:双引号!对,我放了双引号!
双引号做了这么几件事:申请内存,填充尾0,返回首地址。
所以直接传递字符串给函数,函数收到的其实是字符串的首地址呢!
什么?地址?那不就是指针的值嘛!所以形参
arg看似要求传入指针,实际上想要的就是一个地址嘛!
知道这个之后事情就好办了。
*argv[]需要什么呢?需要一个指针数组!
按照之前的思路,指针 = 地址。指针数组= 地址数组 = 存放了一堆地址的数组 = 存放了一堆字符串的数组 = 字符串数组!是不是通俗了许多

ok! *argv[]是存放地址的数组,数组名=首地址,那么我只要得到数组的首地址就是得到了存放地址的数组啊!
所以**argv= *argv[]!

嗷!原来c语言中的**argv(*argv[])是想要字符串数组!

所有内容仅供自己学习领悟,不代表完全正确,如有错误,感谢指正!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:如何通透理解c语言中的**argv(*argv[])?-创新互联
标题路径:http://cdxtjz.cn/article/didjod.html

其他资讯