函数间数据传递方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数之间的数据传递
函数之间的逻辑联系是通过函数调用实现的, 在函数调用过程中,函数之间的数据联系则是 由函数间的数据传递建立的。 在C语言中,函数间数据传递有3种方式: ★参数传递 ★函数返回值 ★全局变量
பைடு நூலகம் 参数传递
函数间参数传递是指把变量或常量的有关信息 传递给函数,而传递的过程发生在函数调用期 间 函数间参数传递的数据类型可以是变量、数组、 指针、结构以及函数等 在函数调用时,实参和形参不是靠名称相同来 传递数据,而是靠对应位置来传递数据,这就 要求形参和实参在数据类型、个数和顺序上一 一对应 函数间传递参数方式有两种:传值与传址
参数传递
例题:最长相似字符串 输入2个字符串(每个字符串长度不超过 255),从第一个字符开始对比两个字符串, 检查下两个字符串相同位置上的连续字符串最 长长度是多少。例如字符串“student”和字 符串“study”,两者最长相似字符串长度为4, 字符串“welcome to usaco”和字符串 “forcomedto usaco”的最长相似字符串长度 是8
参数传递
使用数组名作函数参数,即使在定义形参的时候定义 为“int a[10]”类似的形式,但编译系统并不单独开 辟存储区存放形参数组,实参不是把值一个一个传给 形参,而是把实参数组的起始地址传给形参。这样, 形参数组与实参数组共享存储空间,当形参数组中元 素值发生变化时,实参数组的值也会发生变化。 编译系统不对形参数组大小作检查,因此一维数组可 以不指定大小,数组名后直接跟个空的方括号,数组 的元素个数可以用其他参数来传递。 二维数组名也可以做实参和形参,在定义形参时,可 以将二维数组的第一维大小省略。例如: int max(int b[][5])
精品课件!
精品课件!
练习
书P214的第5题(1.c/1.in/1.out) 输入2行整数,每行有5个整数,将两行整数对应位置 的数进行比较,如果上1行的某个位置值比下1行对应 位置上的值大或者相等,则输出“+”,否则输出“-”, 注意,输出结果总共有5个“+”号和“-”号,每个符 号中间用1个空格隔开。例如输入“11 23 5 7 9”和 “77 1 32 18 9”,则输出“- + - - +”.(2.c/2.in/2.out) 查找最长‘*’号串:有一串字符串,里面有一些‘*’ 号,定义从某个‘*’号开始到下一个‘*’出现之前或 者字符串尾,中间字符串的个数(不包括‘*’号)为 该‘*’号串的长度。现输入某一串字符串,输出其中 最长的‘*’号串的长度值。例如,输入 “st*wel*e*google”,则这个串中最长‘*’号串长度 为6。(3.c/3.in/3.out)
传值
在传值方式下,调用函数将实参的数据复制到 被调用函数的形参中,使得形参取得对应的值 例: #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); } 参跟实参各自占用自己 的存储空间,当形参发 生改变时,不会影响实 参的值。当调用结束时, 程序返回调用函数,形 参的存储单元就被撤销。 传值法的最大特点是 实参和形参占有不同的 存储单元,形参只能复制 实参的值而不能改变实参 的值,这对隐藏数据特别 有利
传址
在传址的方式下,调用函数将实参的地址复制到对应 的参数中去,形参通过地址读取实参的数据。由于实 参和形参指向同一地址,因而共享同一存储单元中的 数据。传值方式就是通过指针进行传递。 例: #include <stdio.h> a
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); }
b
&a
x
&b
y
传址是将实参地址传给形参,当 形参地址所指的值发生改变时,实 际就是实参对应地址所指的值发生 了改变。当被调用函数执行完了之 后,形参也会被撤销掉。 传址最大特点就是被调用函数的 形参所指向的变量就是调用函数中 的变量。
形参与实参类型
对于形参和实参在传递时,需要注意参数类型 的对应 总体原则是形参与实参的数据类型要一致,具 体对应类型参考书上P193的表10-1 例题:输入10个整数,编写一个函数,返回这 10个整数的平均值
函数返回值
对于函数的返回值类型,可以是整型、实型、 字符型,也可以是指针类型,即返回1个地址。 当函数返回值是地址时,称该函数是指针函数 指针函数类型定义: 数据类型 *函数名(形参表) {函数体;}
函数返回值
例题:截取字符串 给定一个字符串(长度小于255),指定两 个整数m和n,从给定的字符串中截取出从第 m个字符开始连续n个字符,作为1个新的字符 串输出。例如给定字符串为“information system”,m值为6,n值为6,则截取出来的 新字符串为“mation”
函数之间的逻辑联系是通过函数调用实现的, 在函数调用过程中,函数之间的数据联系则是 由函数间的数据传递建立的。 在C语言中,函数间数据传递有3种方式: ★参数传递 ★函数返回值 ★全局变量
பைடு நூலகம் 参数传递
函数间参数传递是指把变量或常量的有关信息 传递给函数,而传递的过程发生在函数调用期 间 函数间参数传递的数据类型可以是变量、数组、 指针、结构以及函数等 在函数调用时,实参和形参不是靠名称相同来 传递数据,而是靠对应位置来传递数据,这就 要求形参和实参在数据类型、个数和顺序上一 一对应 函数间传递参数方式有两种:传值与传址
参数传递
例题:最长相似字符串 输入2个字符串(每个字符串长度不超过 255),从第一个字符开始对比两个字符串, 检查下两个字符串相同位置上的连续字符串最 长长度是多少。例如字符串“student”和字 符串“study”,两者最长相似字符串长度为4, 字符串“welcome to usaco”和字符串 “forcomedto usaco”的最长相似字符串长度 是8
参数传递
使用数组名作函数参数,即使在定义形参的时候定义 为“int a[10]”类似的形式,但编译系统并不单独开 辟存储区存放形参数组,实参不是把值一个一个传给 形参,而是把实参数组的起始地址传给形参。这样, 形参数组与实参数组共享存储空间,当形参数组中元 素值发生变化时,实参数组的值也会发生变化。 编译系统不对形参数组大小作检查,因此一维数组可 以不指定大小,数组名后直接跟个空的方括号,数组 的元素个数可以用其他参数来传递。 二维数组名也可以做实参和形参,在定义形参时,可 以将二维数组的第一维大小省略。例如: int max(int b[][5])
精品课件!
精品课件!
练习
书P214的第5题(1.c/1.in/1.out) 输入2行整数,每行有5个整数,将两行整数对应位置 的数进行比较,如果上1行的某个位置值比下1行对应 位置上的值大或者相等,则输出“+”,否则输出“-”, 注意,输出结果总共有5个“+”号和“-”号,每个符 号中间用1个空格隔开。例如输入“11 23 5 7 9”和 “77 1 32 18 9”,则输出“- + - - +”.(2.c/2.in/2.out) 查找最长‘*’号串:有一串字符串,里面有一些‘*’ 号,定义从某个‘*’号开始到下一个‘*’出现之前或 者字符串尾,中间字符串的个数(不包括‘*’号)为 该‘*’号串的长度。现输入某一串字符串,输出其中 最长的‘*’号串的长度值。例如,输入 “st*wel*e*google”,则这个串中最长‘*’号串长度 为6。(3.c/3.in/3.out)
传值
在传值方式下,调用函数将实参的数据复制到 被调用函数的形参中,使得形参取得对应的值 例: #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); } 参跟实参各自占用自己 的存储空间,当形参发 生改变时,不会影响实 参的值。当调用结束时, 程序返回调用函数,形 参的存储单元就被撤销。 传值法的最大特点是 实参和形参占有不同的 存储单元,形参只能复制 实参的值而不能改变实参 的值,这对隐藏数据特别 有利
传址
在传址的方式下,调用函数将实参的地址复制到对应 的参数中去,形参通过地址读取实参的数据。由于实 参和形参指向同一地址,因而共享同一存储单元中的 数据。传值方式就是通过指针进行传递。 例: #include <stdio.h> a
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); }
b
&a
x
&b
y
传址是将实参地址传给形参,当 形参地址所指的值发生改变时,实 际就是实参对应地址所指的值发生 了改变。当被调用函数执行完了之 后,形参也会被撤销掉。 传址最大特点就是被调用函数的 形参所指向的变量就是调用函数中 的变量。
形参与实参类型
对于形参和实参在传递时,需要注意参数类型 的对应 总体原则是形参与实参的数据类型要一致,具 体对应类型参考书上P193的表10-1 例题:输入10个整数,编写一个函数,返回这 10个整数的平均值
函数返回值
对于函数的返回值类型,可以是整型、实型、 字符型,也可以是指针类型,即返回1个地址。 当函数返回值是地址时,称该函数是指针函数 指针函数类型定义: 数据类型 *函数名(形参表) {函数体;}
函数返回值
例题:截取字符串 给定一个字符串(长度小于255),指定两 个整数m和n,从给定的字符串中截取出从第 m个字符开始连续n个字符,作为1个新的字符 串输出。例如给定字符串为“information system”,m值为6,n值为6,则截取出来的 新字符串为“mation”