设为首页 加入收藏

TOP

C语言-函数(二)
2014-11-24 00:43:31 来源: 作者: 【 】 浏览:79
Tags:语言 函数

变量min是imin()私有的,但是return语句把min的数值返回给了调用函数。下面这个语句相当于把min的值赋给lesser
lesser=imin(m,n);
但是,我们可以用下面这个句子吗?
1 imin(m,n);
2 lesser=min;

答案是否定的!!因为调用函数不知道min变量的存在。imin()中的变量是该函数的局部变量。我们前面说了,函数是一个“黑盒子”,里面的东西对main()函数来说是不可见的。

我们还可以使用下面的代码来简化程序
1 int imin(int m,int n) /*函数定义*/
2 {
3 return (m 4 }


return语句的另一个作用是终止执行函数,并把控制返回给调用函数的下一个语句。既是return语句不是函数的最后一个句子,其执行结果也是如此。因此我们可以这样辨析imin()函数
1 int imin(int m,int n) /*函数定义*/
2 {
3 int min;
4 if(m 5 return m;
6 else
7 return n;
8 }

也可以使用下面的句子
return;
这个语句会终止执行函数并把控制返回给调用函数。因为return后没有任何表达式,所以没有返回值,这种形式只能用于void类型的函数之中

为了进一步了解函数的“黑盒子”性质,程序如下
1 #include
2 void mikado(int); /*声明函数原型*/
3
4 int main(void)
5 {
6 int pooh=2,bah=5;
7 printf("In mian(), pooh=%d and &pooh=%p\n",pooh,&pooh);
8 printf("In main(), bah=%d and &bah=%p\n",bah,&bah);
9 mikado(pooh);
10 return 0;
11 }
12
13 void mikado(int bah) /*函数定义*/
14 {
15 int pooh=10;
16 printf("In pikado(), pooh=%d and &pooh=%p\n",pooh,&pooh);
17 printf("In mikado(), bah=%d and &bah=%p\n",bah,&bah);
18 }

output:
In mian(), pooh=2 and &pooh=0028FF1C
In main(), bah=5 and &bah=0028FF18
In pikado(), pooh=10 and &pooh=0028FEEC
In mikado(), bah=2 and &bah=0028FF00

上述的output说明了几个问题:
首先,两个pooh变量具有不同的地址,两个bah变量也是这样,证明了函数的“黑盒子”性质;第二,main()函数调用mikado(pooh)把实际参数(main()中的pooh值2)传递给了mikado(int bah)中的形式参数。注意:这种传递只是进行了数值传递,两个变量(main()中的pooh和mikado()中的bah)仍分别保持原来的特性,再一次证明了函数的“黑盒子”性质。

改变调用函数中的变量
如果我们要交换变量怎么办?也许我们会使用下面的程序
1 #include
2 void interchange(int u,int v); /*声明函数原型*/
3 int main(void)
4 {
5 int x=5,y=10;
6 printf("Originally x=%d and y=%d.\n",x,y);
7 interchange(x,y);
8 printf("Now x=%d and y=%d.\n",x,y);
9 return 0;
10 }
11
12 void interchange(int u,int v) /*函数定义*/
13 {
14 int temp;
15
16 temp=u;
17 u=v;
18 v=temp;
19 }

output:
Originally x=5 and y=10.
Now x=5 and y=10.

但是这是错误的程序,调用函数中的变量没有发生改变。void interchange(int u,int v)中的temp,u,v都是局部变量,它们都处于“黑盒子”中,对main()来说是不可见的。在函数中对变量的改变不会影响main()中的变量。我们可以通过下面的程序来验证:
1 #include
2 void interchange(int u,int v); /*声明函数原型*/
3 int main(void)
4 {
5 int x=5,y=10;
6 printf("Originally x=%d and y=%d.\n",x,y);
7 interchange(x,y);
8 printf("Now x=%d and y=%d.\n",x,y);
9 return 0;
10 }
11
12 void interchange(int u,int v) /*函数定义*/
13 {
14 int temp;
15
16 printf("Originally u=%d and v=%d\n",u,v);
17 temp=u;
18 u=v;
19 v=temp;
20 printf("Now u=%d and v=%d.\n",u,v);
21 }

output:
Originally x=5 and y=10.
Originally u=5 and v=10.
Now u=10 and v=5.
Now x=5 and y=10.

这样我们又一次证明了“黑盒子”性质

也许我们可以用return来返回值,进行数值调换。但是return语句只能把一个数值传递给调用函数,而数值交换需要传递2个的数值给调用函数。
可以用指针来实现!
1 #include
2 void interchange(int * u,int * v); /*声明函数原型*/
3 int main(void)
4 {
5 int x=5,y=10;
6 printf("Originally x=%d and y=%d.\n",x,y);
7 interchange(&x,&y); /*向函数传递地址*/
8 printf("Now x=%d and y=%d.\n",x,y);
9 return 0;
10 }
11
12 void interchange(int * u, int * v) /*函数定义*/
13 {
14 int temp;
15 temp=*u;
16 *u=*v;
17 *v=temp;
18 }

这样,就进行了数值交换

完成。

摘自 owen-beta

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言初学-const指针 下一篇c语言初学-关于内存空间的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: