main传参的两种形式
c语言中main函数传参有两种形式,分别如下所示:
第一种:
1 | main(int argc, char *argv[]) |
第二种:
1 | main(int argc, char **argv) |
这两种传参方式有什么区别呢?刚开始对二级指针不太熟悉的时候,笔者不太理解第二种方法,但常见的编码风格使用第二种情况是比较多,且当了解这两种传参方式之后会发现第二种传参方式有很多优点。但对初学者属实有点不知所云。笔者根据自己的理解来阐述一下这两者的区别:
区别如下:
- 第一种argv是一个char类型的指针数组
- 第二种argv是一个指向char类型指针的指针
这两种都能通过argv[i]拿到第(i)个值,这一点对于第一种char *argv[]不难理解,因为原型就是一个字符指针数组,本质就是数组,所以可以通过下标来访问;第二种char * *argv,这种为什么可以通过argv[i]来访问第(i)个值?可以这样理解:例如想要访问第一个元素可以用 *argv +0 即先拿到 **argv 的起始地址,然后再加上偏移地址。使用argv[0]的原理与上面的类似就相当于是argv是数组起始地址,下标[0]表示偏移地址。
总结:
看到第二种方式不由的让我想起二级指针传参相较于一级指针传参的优点,其次是第二种方式在为arcv分配内存的时候可以分配不连续的内存空间,而第一种是数组本身就要求要分配连续的内存空间,但我个人认为内存分配是操作系统做的事情,分配的也不是实际物理意义上的连续内存空间,而是操作系统虚拟出来的内存映射表。
- 本文标题:main传参的两种形式
- 创建时间:2023-11-03 23:45:56
- 本文链接:2023/11/03/main传参的两种形式/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!