C语言程序设计-函数解析.ppt
文本预览下载声明
值传递方式 方式:函数调用时,为形参分配单元,并将实参的值传给形参;调用结束,形参单元被释放,实参单元仍保留并维持原值。(单向传递) 参数传递方式:值传递、地址传递 形参 实参 数值 表达式 变量 变量 x 例:以下程序运行后,输出结果是 #include stdio.h fun(int x,int y,int z) {x=x+y+z; y=y/2; z=x+y; if(x%2) return x; if(y!=0) return y; return z; } main() { int x=10,y=21,z=30,d; d=fun (5,y%2,z); printf(%d\n,d); printf(%d %d %d ,x,y,z); } main func x y z 10 21 30 d y z 5 1 30 5 1 36 0 36 fun函数值 36 若子函数省略了类型定义,默认为整型 地址传递 方式:函数调用时,将数据的存储地址作为参数传递给形参,形参与实参占用同样的存储单元,实现“双向”传递。 形参 实参 一维数组名 二维数组名 参数传递方式:值传递、地址传递 一维数组 二维数组 一维数组 #include stdio.h void main() {int a[10]={23,-1,12,-3,-7,-8,46,6,78,34},i,num; int count(int a[10] ); num=count( a ); for(i=0;i10;i++) if(a[i]!=0) printf(%d\t,a[i]); printf(\nnum=%d,num); } int count(int b[10] ) {int i,n=0; for(i=0;i10;i++) if(b[i]0) n+=1; else b[i]=0; return n;} a b 一维数组名作函数参数,实现地址传递 函数说明 实参为数组名 函数定义 形参为一维数组 0 0 0 0 函数调用 结论:地址传递时,形参值的变化影响实参值的变化。 P177 例: 读下列程序,当输入1479时,写出其运行结果。 #include stdio.h void str(int n, char s[ ]) { int i= 0; do { s[i++]=n%10+0; n/=10; } while (n); s[i]=\0; } void main ( ) { int m; char a[50]; scanf (%d, m); str (m, a); printf(%s,a); } 形参一维数组的长度可以省略 友情提醒: n%10+0 将一个整数数值转换为一个数字字符 #include stdio.h #include string.h int fun (char str[79]) /* int func (char str[ ] ) */ { int i,j; i=0; j=strlen(str)-1; while(i=j) if(str[i++]!=str[j--]) return 0; return 1; } void main ( ) { char str[79]; int flag; gets(str); flag=fun(str); if( flag ) printf(%s is Huiwen string,str); else printf(%s is not Huiwen string,str); } 【函数编程】函数的功能是判断一个字符串是不是“回文串”。若是返回1,否则返回0 。 fun(str) void main() {int a[2][4]={13,2,4,5,76,83,34,8},i,j; void fun(int b[2][4] ); fun(a) ; for(i=0;i2;i++) { for(j=0;j4;j++) printf(%4d,a[i][j]); printf(\n);} } void fun(int b[2][4]) {int i,j; for(i=0;i2;i++) for(j=0;j4;j++) if(b[i][j]%2) b[i][j]=0; } a 二维数组名作函数参数,实现地址传递 P182 函数说明
显示全部