第十三章 对C言的深入谈论.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十三章 对C语言的深入谈论 13.1 对函数的深入谈论 一. main函数的参数 main函数是C语言的主函数,是整个程序的入口,每个C程序有且只有一个main函数。在此之前我们学过C程序中,main函数括号里是空的,没有任何参数。在本节中,我们学习带参数的main函数。main函数通常由两个参数,其定义形式如下: main(int argc, char *argv[]) { …… } argc和argv是main函数的两个参数,其名称可以编程人员自行确定,但是每个参数的类型是C语言规定好了的。第一个参数必须是整型;第二个参数必须是字符串的指针,也就是char类型的二维指针。第二个参数也可以定义为char **agrv。 在C语言中,main函数是程序的入口,在一般情况下,没有其它的函数来调用main函数,那么main函数的参数有什么中用呢? 我们对包含以上主函数的、名为myc的文件进行编译连接,生成名为myc.exe的可执行文件后,即可在dos下输入命令执行该程序: myc 这就是命令行,myc即为执行程序的命令。这时argc中的值为1,argv[0]中将存放字符串“myc”的首地址,即指向字符串“myc”。如输入: myc OK! GOODCR 在此命令行中OK!和GOOD称为命令行参数。这时argc的值为3,也就是argc里存放的是字符串的个数,argv里存放的如下图所示。 说明 argv[0]、argv[1]、argv[2]分别指向字符串”myc”、”OK!”、“GOOD”。其中,为了执行程序,字符串argv[0]必不可少,argc值为3。从argv[1]开始都是可选的命令参数。另外,按标准规定,argv[argc]由系统置‘\0’。 命令行中,各参数之间用空格符或TAB符隔开,空格不作为参数的内容。若要把空格也作为参数的内容,应该把字符串放在一对双引号内。 例13.1 若以下程序放在myc.c文件中,在编译连接后,生成一个myc.exe文件 ,输入argc和argv中的数据。 #include”stdio.h” main(int argc, char *argv[]) { int i; printf(“argc=%d\n”,argc); for(i=1;iargc;i++) printf(“%s”,argv[i]); printf(“\n”); } 若在命令中输入: myc A COMMAND LINECR 程序将输出: argc=4 A COMMAND LINE 二. 函数指针 在C语言中,函数名代表的是一个函数的入口地址,因此可以定义一个指针指向该入口地址,即指向函数的指针。 指向函数的指针变量定义格式如下: 函数返回值类型(*指针名)(函数参数列表); 例13.2 以下程序使用函数指针调用函数 int fun(int a, int *b) { …… } main() { int (*pfun)(int, int*), a, b, s; /*此处定义了pfun这个函数指 针*/ pfun=fun; /*将函数名fun赋给指针pfun,即让pfun指向 fun*/ …… s=(*pfun)(a, b);/*此处通过pfun指针来调用fun函数,相当于调用 s=fun(a, b)*/ …… } 在这里,说明符int (*pfun)(int, int*)说明pfun是一个指向函数的指针变量,这个函数的返回值类型必须是int类型。(int, int*)说明该函数的参数列表中,第一个参数是整型,第二个参数类型是一个整型指针。函数指针的参数列表必须与指向的函数的参数列表一一对应,即类型要一一对应。 三. 函数的递归调用 在函数调用过程中,函数直接或间接调用了自己,我们把这种调用称作函数的递归调用。函数直接调用了自己,称作直接调用;函数间接的调用了自己,称作间接调用。在这里只讨论简单的直接递归。 使用递归调用的3个条件 (1)可以把要解决的问题转化为一个新的问题,而这个新的问题的解决方法仍与原来的解法相同,只是处理

文档评论(0)

139****3928 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档