- 35
- 0
- 约1.78千字
- 约 11页
- 2021-12-11 发布于广东
- 举报
第一页,共11页 函数之间的数据传递 函数之间的逻辑联系是通过函数调用实现的,在函数调用过程中,函数之间的数据联系则是由函数间的数据传递建立的。 在C语言中,函数间数据传递有3种方式:★参数传递★函数返回值★全局变量 第二页,共11页 参数传递 函数间参数传递是指把变量或常量的有关信息传递给函数,而传递的过程发生在函数调用期间 函数间参数传递的数据类型可以是变量、数组、指针、结构以及函数等 在函数调用时,实参和形参不是靠名称相同来传递数据,而是靠对应位置来传递数据,这就要求形参和实参在数据类型、个数和顺序上一一对应 函数间传递参数方式有两种:传值与传址 第三页,共11页 传值 在传值方式下,调用函数将实参的数据复制到被调用函数的形参中,使得形参取得对应的值 例: #include stdio.h void swap(int,int); main() {int a,b; scanf(“%d%d”,a,b); printf(“a=%d,b=%d\n”,a,b); swap(a,b); printf(“a=%d,b=%d\n”,a,b); } void swap(int x,int y) {int t; t=x; x=y; y=t; printf(“x=%d,y=%d\n”,x,y); } 传值调用的时候,形 参跟实参各自占用自己 的存储空间,当形参发 生改变时,不会影响实 参的值。当调用结束时, 程序返回调用函数,形 参的存储单元就被撤销。 传值法的最大特点是 实参和形参占有不同的 存储单元,形参只能复制 实参的值而不能改变实参 的值,这对隐藏数据特别 有利 第四页,共11页 传址 在传址的方式下,调用函数将实参的地址复制到对应的参数中去,形参通过地址读取实参的数据。由于实参和形参指向同一地址,因而共享同一存储单元中的数据。传值方式就是通过指针进行传递。 例: #include stdio.h void swap(int *,int *); main() {int a,b; scanf(“%d%d”,a,b); printf(“a=%d,b=%d\n”,a,b); swap(a,b); printf(“a=%d,b=%d\n”,a,b); } void swap(int *x,int *y) {int t; t=*x; *x=*y; *y=t; printf(“x=%d,y=%d\n”,*x,*y); } a b a b x y 传址是将实参地址传给形参,当 形参地址所指的值发生改变时,实 际就是实参对应地址所指的值发生 了改变。当被调用函数执行完了之 后,形参也会被撤销掉。 传址最大特点就是被调用函数的 形参所指向的变量就是调用函数中 的变量。 第五页,共11页 形参与实参类型 对于形参和实参在传递时,需要注意参数类型的对应 总体原则是形参与实参的数据类型要一致,具体对应类型参考书上P193的表10-1 例题:输入10个整数,编写一个函数,返回这10个整数的平均值 第六页,共11页 参数传递 使用数组名作函数参数,即使在定义形参的时候定义为“int a[10]”类似的形式,但编译系统并不单独开辟存储区存放形参数组,实参不是把值一个一个传给形参,而是把实参数组的起始地址传给形参。这样,形参数组与实参数组共享存储空间,当形参数组中元素值发生变化时,实参数组的值也会发生变化。 编译系统不对形参数组大小作检查,因此一维数组可以不指定大小,数组名后直接跟个空的方括号,数组的元素个数可以用其他参数来传递。 二维数组名也可以做实参和形参,在定义形参时,可以将二维数组的第一维大小省略。例如:int max(int b[][5]) 第七页,共11页 参数传递 例题:最长相似字符串 输入2个字符串(每个字符串长度不超过255),从第一个字符开始对比两个字符串,检查下两个字符串相同位置上的连续字符串最长长度是多少。例如字符串“student”和字符串“study”,两者最长相似字符串长度为4,字符串“welcome to usaco”和字符串“forcomedto usaco”的最长相似字符串长度是8 第八页,共11页
原创力文档

文档评论(0)