资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第 十 二章,函数参数,1,2,目标,掌握函数参数按值传递,掌握函数参数按指针传递,掌握函数参数为数组类型,掌握全局变量和局部变量,3,按值传递,函数参数在默认情况下的传值方式,按值传递是赋值过程,当修改了形参的值,不会改变实参的值,4,#include stdio.h,/,声明并定义函数,void changeParaValue(int para1),para1+;,printf(,函数内形参值为:,%dn,para1);,/,主函数,void main(),int i;,i=10;,printf(,调用函数前值为:,%dn,i);,changeParaValue(i);/,调用函数,,i,作为实参传入,printf(,调用函数后值为:,%dn,i);,5,交换值功能,#include stdio.h,void swap(int i,int j),int tmp;,tmp=i;,i=j;,j=tmp;,void main(),int x,y;,x=1;,y=4;,swap(x,y);,通过函数使变量的两个值交换,是否能够实现,我们需要另外的值传递方式,6,指针作为函数参数,函数的参数可以是简单数据类型,也可以是指针类型。,使用指针类型做函数的参数,实际向函数传递的变量的值是一个地址。,7,#include stdio.h,/,定义并声明函数,changeValue,,该函数有一个参数,该参数的类型为指针,void changeValue(int*p),(*p)+;/,对该指针变量所指向的值进行自增,void main(),int a,*pi;,a=10;,pi=,printf(,调用函数前变量值:,%dn,*pi);,/,调用函数,由于该函数的参数为一个指针参数,所以传一个指针变量,changeValue(p);,printf(,调用函数后变量值:,%dn,*pi);,8,#include stdio.h,/swap,函数实现了互换两个变量的值,void swap(int*px,int*py),int tmp;,tmp=*px;,*px=*py;,*py=tmp;,void main(),int m,n,*pm,*pn;,m=3;,n=12;,pm=,pn=,printf(,调用函数前变量,m=%d,,,n=%dn,m,n);,swap(pm,pn);,printf(,调用函数后变量,m=%d,,,n=%dn,m,n);,&m,&n,3,12,&m,12,&n,3,pm m,pn n,px m,py n,实参的值赋给形参,9,数组作为函数参数,数组名包含了数组中第一个元素 的地址,当用数组作为参数时,传递的就是数组中第一个元素的地址,我们可以给函数加一个参数,该参数就是用来传递数组长度给函数的,10,#include stdio.h,int getLargest(int arr,int length),int max,i;,max=arr0;,for(i=0;i length;i+),if(max arri),max=arri;,return max;,void main(),int inputArr10,i,max;,printf(,请输入,10,个数字。,n);,/,通过循环输入,10,个数字,for(i=0;i 10;i+),scanf(%d,/,调用,getLargest,函数,该函数返回一个数组中的最大值,max=getLargest(inputArr,10);,/,输出最大值,printf(,最大值为:,%d,max);,0,1,2,3,6,7,8,9,inputArr,数组,arr,11,void main(),int arr10,arrLength,max;,/,调用输入输入函数,arrLength=inputArr(arr);,/,得到最大值,max=getLargest(arr,arrLength);,/,输出最大值,printf(,最大值为:,%dn,max);,#include stdio.h,int inputArr(int arr),char in,i;,int count=0,printf(,请输入数字。,n);,for(i=0;i 10;i+),scanf(%d,count+;,getchar();,printf(,是否继续输入,?(y/n);,scanf(%c,if(in=n|in=N),break;/,用户停止输入,退出循环,return count;/,这个,count,的值就是用户输入的数量,int getLargest(int arr,int length),int max,i;,max=arr0;,for(i=0;i length;i+),if(max arri),max=arri;,return max;,12,局部变量和全局变量,局部变量是在函数内部定义的变量,其作用域为它所在的函数内,全局变量是函数外声明的变量。其作用域为从定义变量的位置开始到程序结束,其它任何函数都能访问。,13,变量的作用域,限于陆地,限于水中,限于空中,14,局部变量,15,全局变量,#include,stdio.h,int gm=1,gn=3;/,声明两个全局变量,gm,和,gn,/,声明并定义函数,f1,,该函数返回类型为,int,,有一个,int,类型参数,int f1(int t),int r;,r=t+gm;/,使用全局变量,gm,return r;,void main(),int x,y;,x=10;,y=f1(x)+gn;/,使用全局变量,gn,16,变量的存储类型,自动的(,auto,),静态的(,static,),寄存器(,register,),外部的(,extern,),17,静态的(,static,),#include stdio.h,void func(int count),static int m=0;,int n=0;,m=m+1;,n=n+1;,printf(,第,%d,次调用函数的时候:,m=%d,,,n=%dn,count,m,n);,void main(),int i;,for(i=0;i10;i+),func(i);,18,总结,在默认情况下,函数是按值传递,函数的参数可以是我们在前面学过的简单数据类型,也可以是指针类型。使用指针类型做函数的参数,实际向函数传递的变量的值是一个地址。,函数参数是数组时,实际传递的是数组的首地址。,所谓的作用域就是程序中的那些部分可以访问哪些变量,哪些变量在哪些地方不能被别人访问。,局部变量是在函数内部定义的变量,其作用域为它所在的函数内。,我们把在函数外声明的变量称为外部变量,外部变量也可以称为全局变量。全局变量的作用域为从定义变量的位置开始到程序结束,其它任何函数都能访问。,存储的方法分为两大类:静态存储和动态存储。具体包含四种:自动的(,auto,),静态的(,static,),寄存器(,register,),外部的(,extern,)。,
展开阅读全文