- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章对函数的进一步讨论 一、传给main函数的参数 第一种写法:main(int argc,char **argv){….} 第二种写法:main(int argc,char *argv[]){….} 期中argc和argv是两个参数名,可由用户自已命名,但是它们的 类型却是固定的。第一个参数argc必须是整数;第二个参数argv 是一个指向字符型的指针数组的指针,这个字符型指针数组的 每个指针都指向一个字符串。见第11章例题: 二、通过实参向函数传递函数名或指向函数的指针变量 (见书158页例题即可) C语言规定:函数必须先定义,后调用(函数的返回值类型为int 或char 除 外)凡是未在调用前定义的函数(即未在调用前写函数原型),c编译程序都 默认函数的返回值为int型。对于返回值为其他类型的函数,若把函数的定义 放在调用之后,应该在调用之前对函数进行说明(即写函数原型)。 函数的递归调用 必须符合以下三个条件: 1、可以把要解的问题转化为一个新的问题,而这个新的问题的 解法仍与原来的解法相同,只是所处理的对象有规律地递增或 递减。 2、可以应用这个转化过程使问题得到解决。 3、必定要有一个明确的结束递归的条件。 /* 此函数用于计算 a 的阶乘 */ int factorial(int a) { if (a == 1) return 1; else { a = a * factorial(a-1); return a; } } 函数递归调用 在一个函数体内调用自身称为函数的递归调用 第十二章 标识符的作用域和存储类 变量的作用域 4-1 作用域是某些事物起作用或有效的区域。 限于陆地 限于海洋 限于空中 程序中变量也有不同的使用范围,称为变量的作用域。变量的作用域决定变量的可访问性 变量的作用域 4-2 void displayDiscount() { float discount_amt; . . . . . . . . . } 局部变量:不能在函数外使用 float discount_amt; void main() { . . . . . . } void displayDiscount() { . . . . . . } 全局变量:可以在整个程序中使用 按c的规定,如果指针变量p已指向数组中的一个元素,则p+1或p++指向同一数组中的下一个元素(而不是将p值简单地加1) main() { int a[5]={1,2,3,4,5}; int *p; int b; p=a; for(b=0;b5;b++) printf(%d\n,*(p++)); } printf(%d\n,*(++p)); 的结果是不一样的。 例:输出数组中的全部元素 有三种方法: (1)main() { int a[10];int i; for(i=0;i10;i++) scanf(“%d”,a[i]); printf(“\n”); for(i=0;i10;i++) printf(“%d”,a[i]); } 2)main() { int a[10];int i; for(i=0;i10;i++) scanf(“%d”,a[i]); printf(“\n”); for(i=0;i10;i++) printf(“%d”,*(a+i)); } 3)main() { int a[10];int *p,i; for(i=0;i10;i++) scanf(“%d”,a[i]); printf(“\n”); for(p=a;p(a+10);p++) printf(“%d”,*p); } 在使用指针变量时,有几个问题要注意: 1)指针变量可以实现使本身的值改变例如第(3)种方法是用指针变量p来指向元素,用p++使p的值不断改变,这是合法的,如果不用p而使用a变化,假如将上述(3)程序的最后两行改为:for(p=a;a(p+10);a++) printf(“%d”,*a);是不行的,因为a是数组名,它是数组首地址,它的值在程序运行期间是固定不变的,是常量,a++是什么意思?这是无法实现的 所以a++ a=p p=a等运算都是非法的,而p++ p=a p=a[i]则都是合法的。 (2)要注意指针变量的当前值。 main() { int a[10];int *p,i; p=a; for(i=0;i10;i++) scnaf(“%d”,p++); printf(“\n”); for(;p(a+10);p
文档评论(0)