在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这主函数的形参乍一看略抽象啊,什么意思?主函数还有参数了? 这是用来在命令行里传递参数用的! argc 记录命令行参数个数(以间隔为界,不含间隔);*argv[] 是个指针数组,分别指向每个参数。 例如:在命令行执行 a.exe username password ,则 argc 等于 3 , argv[0] 为 “a.exe” argv[1] 为 “username” argv[2] 为 “password”
又有这样的主函数:void main(int argc,char **argv) 这又是什么鬼?
其实和上面那个是一样的!这就涉及到数组和指针的关系问题了,他俩真是纠缠不清呢。 在C语言里,要想定义一个字符串,有两种办法: 1、定义一个字符数组:char a[] = "hello" 2、定义一个字符指针:char *b = "hello" a 和 b 中存储的都是首字符的地址。我们可以通过 a[2] 得到 “l” ,而且,也可以通过 p[2] 得到 “l”。 printf(a) 和 printf(b) 是一样的。在打印时,printf()打印指向的这个字符,如果后面仍有字符,就挪动指针继续打印,直到\0。 事实上,在通过a[2]取得元素值时,其内部就是通过指针方法得到的。 而两者的不同之处在于: a 是一个常量,存储的是第一个字符的地址,是不可变的。比如 a++就是错的。 b 是个指针变量,存储第一个字符的地址,也就是字符串的地址,它是可变的,可以b++,还可通过 *(b+2) 得到 “l”。
插播一条基础知识:
回到上面 char *argv[] 和 char **argv 的问题,两者为什么是一样的呢? char *argv[] 是一个指针数组(从右往左读,[]的优先级高于*,如果是char (*argv)[] 的话就是一个数组指针了),数组的每一项都是一字符指针,如下图: char **argv 从右往左读-> (char *)(*argv) ,可以发现argv是一个指针,指向什么呢,指向字符指针!那么这是一个二级指针,字符指针的指针,相当于字符数组的数组。当取argv[1]时,也就得到第二个字符指针了。所以结构其实和上图是一样的。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论