• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C主函数:voidmain(intargc,char*argv[])

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这主函数的形参乍一看略抽象啊,什么意思?主函数还有参数了?

这是用来在命令行里传递参数用的!

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]时,也就得到第二个字符指针了。所以结构其实和上图是一样的。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#.NET大型通用信息化系统集成快速开发平台4.1版本-访问记录功能改进 ...发布时间:2022-07-13
下一篇:
C#RSA加密解密发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap