当前位置:
文档之家› 25-变量作为函数的参数进行传递.解答
25-变量作为函数的参数进行传递.解答
单元二 变量作为函数的参数进行传递 1、普通变量作为函数的参数进行传递
• 1.1 函数参数及其传递方式
–形参与实参
• 形式参数:定义函数时函数名后面括号中的变量名 • 实际参数:调用函数时函数名后面括号中的表达式
例 比较两个数并输出大者 main()
{ int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b); (main 函数) c=max(a,b);
实参
max(int x, int y) (max 函数) printf("Max is %d",c);
{ int z;
}
z=x>y?x:y; return(z); }
max(int x, int y) { int z;
形参
z=x>y?x:y;
}
}
4、形参在函数被调用前不占存储空间;函数调用时为形
参分配存储空间;调用结束,空间释放。
mmaaiinn(()) {{ iinnttaa,b,b,c,c;;
aa==2233;;bb==3344; ; cc==ssuumm((aa,,bb));; pprriinnttff((““ssuummiiss%%dd"",c,c));; }} ssuumm((iinntt xx,,iinntt yy)) {{ iinnttzz;; zz==xx++yy; ; rreettuurrnn((zz));; }}
printf(“a=%d,b=%d”,a,b) 调用结束:x: 7
}
y: 11 y: 11 b: 11 b: 7
y: 11
#include <stdio.h> long sum(int a, int b);
文件包含编译预处理命令
long factorial(int n);
函数声明
main()
{ int n1,n2;
long a;
long sum(int a, int b);
scanf("%d,%d",&n1,&n2);
回收空c间
5x7x
回收空a间
2x3x
xx
回收空间b
3x4x
回收空x间
2x3x
xx
回收空间y
Байду номын сангаас34
回收空间z
57
5、如果实参是变量,则实参和形参的名字可以相同
也可以不同,互不影响,因为它们存储数据的空 间不同。
mmaaiinn(()) {{ iinnttaa,b,b,c,c;;
aa==2233;;bb==3344; ; cc==ssuumm((aa,,bb));; pprriinnttff((““ssuummiiss%%dd"",c,c));; }} ssuumm((iinntt aa,,iinntt bb)) {{ iinnttzz;; zz==aa++bb; ; rreettuurrnn((zz));; }}
1、实参必须有确定的值
sum(int x, int y) { int z;
z=x+y; return(z); }
main() { int a,b,c;
scanf("%d,%d",&a,&b); c=sum(a,b); printf(“sum is %d",c); }
main() { int a,b,c;
回收空c间
5x7x
回收空a间
2x3x
xx
回收空间b
3x4x
回收空a间
2x3x
xx
回收空间b
34
回收空间z
57
例 1计算x的立方
#include <stdio.h> float c(float x) { return(x*x*x); } main() { float a, p;
printf("Please input value of a:"); scanf("%f",&a); p=c(a); printf(”Cube of %.4f is %.4f\n",a,p); } 运行情况:
#i例nc2l交ud换e两<个st数dio.h>
调用前:x: 7
main()
{ int x=7,y=11;
调用: x: 7
swap(x,y);
printf("%d,%d\n",a,b);
a: 7
} void swap(int a,int b)
swap: a: 11
{ int temp; temp temp=a; a=b; b=temp;
int sum(int 3x, int 2y3 )
int c; a=3;b=23;
{ int z; z=x+y; 等价于z=3+23;
c=sum(a,b);
return(z); 等价于sum=z;
printf(“sum is %d\n",c); }
}
• 1.2 函数参数及其传递方式
形参与实参
说明:
return(z);
}
in1、t summa(iinn(t) x, int y)
{2、in{t zin; t a,b;
3、z=x+yi;nt c;
4、returan=(z3);;b=23; }5、 c=sum(a,b);
x=a
y=b
m6、ain(p)rintf(“sum is %d\n",c);
{7、in}t a,b;
a=23;b=24; c=sum(a,b); printf(“sum is %d",c); }
2、形参必须指定类型
int x
int y
int sum(int x, int y) { int z;
z=x+y; return(z); }
3、形参与实参类型一致,个数相同
sum(int x, int y,float z) sum(int x, int y,float z)
{ int d;
{ int d;
d=x+y+z;
d=x+y+z;
return(d);
return(d);
}
}
main()
main()
{ int a,b,c; a=23;b=34; { int a=23,b=34,c,f;
c=sum(a,b);
c=sum(a,b,f);
printf(“sum is %d",c); printf(“sum is %d",c);
内存的变化情况
a ×1×.2
p
1×.7×28
x
1.2
Please input value of a: 1.2
–1.3参数传递方式
•值传递方式
–方式:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值
–特点: » 形参与实参占用不同的内存单元 » 单向传递 » 实参可以是常量、变量或表达式,但必须有 确定的值。