函数间数据传递方式_第1页
函数间数据传递方式_第2页
函数间数据传递方式_第3页
函数间数据传递方式_第4页
函数间数据传递方式_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

函数间数据传递方式第一页,共十一页,2022年,8月28日函数之间的数据传递函数之间的逻辑联系是通过函数调用实现的,在函数调用过程中,函数之间的数据联系则是由函数间的数据传递建立的。在C语言中,函数间数据传递有3种方式:

★参数传递

★函数返回值

★全局变量第二页,共十一页,2022年,8月28日参数传递函数间参数传递是指把变量或常量的有关信息传递给函数,而传递的过程发生在函数调用期间函数间参数传递的数据类型可以是变量、数组、指针、结构以及函数等在函数调用时,实参和形参不是靠名称相同来传递数据,而是靠对应位置来传递数据,这就要求形参和实参在数据类型、个数和顺序上一一对应函数间传递参数方式有两种:传值与传址第三页,共十一页,2022年,8月28日传值在传值方式下,调用函数将实参的数据复制到被调用函数的形参中,使得形参取得对应的值例:#include<stdio.h>voidswap(int,int);main(){inta,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);}voidswap(intx,inty){intt;

t=x;x=y;y=t;

printf(“x=%d,y=%d\n”,x,y);}传值调用的时候,形参跟实参各自占用自己的存储空间,当形参发生改变时,不会影响实参的值。当调用结束时,程序返回调用函数,形参的存储单元就被撤销。传值法的最大特点是实参和形参占有不同的存储单元,形参只能复制实参的值而不能改变实参的值,这对隐藏数据特别有利第四页,共十一页,2022年,8月28日传址在传址的方式下,调用函数将实参的地址复制到对应的参数中去,形参通过地址读取实参的数据。由于实参和形参指向同一地址,因而共享同一存储单元中的数据。传值方式就是通过指针进行传递。例:#include<stdio.h>voidswap(int*,int*);main(){inta,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);}voidswap(int*x,int*y){intt;

t=*x;*x=*y;*y=t;

printf(“x=%d,y=%d\n”,*x,*y);}ab&a&bxy传址是将实参地址传给形参,当形参地址所指的值发生改变时,实际就是实参对应地址所指的值发生了改变。当被调用函数执行完了之后,形参也会被撤销掉。

传址最大特点就是被调用函数的形参所指向的变量就是调用函数中的变量。第五页,共十一页,2022年,8月28日形参与实参类型对于形参和实参在传递时,需要注意参数类型的对应总体原则是形参与实参的数据类型要一致,具体对应类型参考书上P193的表10-1例题:输入10个整数,编写一个函数,返回这10个整数的平均值第六页,共十一页,2022年,8月28日参数传递使用数组名作函数参数,即使在定义形参的时候定义为“inta[10]”类似的形式,但编译系统并不单独开辟存储区存放形参数组,实参不是把值一个一个传给形参,而是把实参数组的起始地址传给形参。这样,形参数组与实参数组共享存储空间,当形参数组中元素值发生变化时,实参数组的值也会发生变化。编译系统不对形参数组大小作检查,因此一维数组可以不指定大小,数组名后直接跟个空的方括号,数组的元素个数可以用其他参数来传递。二维数组名也可以做实参和形参,在定义形参时,可以将二维数组的第一维大小省略。例如:

intmax(intb[][5])第七页,共十一页,2022年,8月28日参数传递例题:最长相似字符串

输入2个字符串(每个字符串长度不超过255),从第一个字符开始对比两个字符串,检查下两个字符串相同位置上的连续字符串最长长度是多少。例如字符串“student”和字符串“study”,两者最长相似字符串长度为4,字符串“welcometousaco”和字符串“forcomedtousaco”的最长相似字符串长度是8第八页,共十一页,2022年,8月28日函数返回值对于函数的返回值类型,可以是整型、实型、字符型,也可以是指针类型,即返回1个地址。当函数返回值是地址时,称该函数是指针函数指针函数类型定义:

数据类型*函数名(形参表)

{函数体;}第九页,共十一页,2022年,8月28日函数返回值例题:截取字符串

给定一个字符串(长度小于255),指定两个整数m和n,从给定的字符串中截取出从第m个字符开始连续n个字符,作为1个新的字符串输出。例如给定字符串为“informationsystem”,m值为6,n值为6,则截取出来的新字符串为“mation”第十页,共十一页,2022年,8月28日练习书P214的第5题(1.c/1.in/1.out)输入2行整数,每行有5个整数,将两行整数对应位置的数进行比较,如果上1行的某个位置值比下1行对应位置上的值大或者相等,则输出“+”,否则输出“-”,注意,输出结果总共有5个“+”号和“-”号,每个符号中间用1个空格隔开。例如输入“1123579”和“77132189”,则输出“-+--+”.(2.c/2.in/2.out)查找最长‘*’号串:有一串字符串,里面有一些‘*’号,定义从某个‘*’号开始到下一个‘*’出现之前或者字符串尾,中间字符串的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论