C语言 函数钓友

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:27:10
1:

#include<stdio.h>
void fun(int a,int b)
{int t;
t=a;a=b;b=t;
}
main()
{ int c[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=10;i<10;i+=2) fun(c[i],c[i+1]);
for(i=0;i<10;i++) printf("%d,"c[i]);
printf("\n");
}

上面这段C程序,前面定义了功能函数fun 为无返回值,为什么在后面的FOR循环中又调用了这个函数啊????

2:

viodf(int *x,*y)
{int t;
t=*x,*x=*y;*y=t;
}
main()
{int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{f(p,q);p++;q--;}
for(i=0;i<8;i+)printf("%d,",a[i]);
}

这条程序的运行结果是 8,7,6,5,4,3,2,1

这条程序也是在开始时候定义了无返回值,但后面也调用了函数f。

想问问大家,为什么定义了无返回值函数,还是可以调用,另外请高手告诉我,无返回值viod一般在什么情况下用啊?谢谢
在函数里的形参改变了,但形参不会返回,也不会影响 MAIN函数,是不是可以理解给上面的功能函数可以删去????

1 因为程序数组只需要改变这两个数的位置,
而不需要结果,而且这个调用的函数是无法达到目的的,要交换数组元素的值就要使用指针。
2 上面差不多讲了。
这两个程序的关键主要在2调用函数是使用了指针,传递的是地址,通过地址可以改变元素的值,而1的函数调用只改变形参的值而不改变实参的值,所以没有用。
void是没有返回值的,但是可以利用指针来改变元素的值。上面的例子主要是用来说明指针在函数调用中的作用的。

函数可以是执行一个功能,并不一定要有返回值,比如说上面的2例,它的作用只是将两个数调换位置,执行的过程实际上就相当于执行了一段语句,函数本身有没有值没关系,不要理解为数学上的函数。这个学着学着就明白了,不用着急。

只要你觉得你的函数不需要返回值就可以定义一个viod函数。
根据c规定,函数实参到形参传递时值传递,所以第一个不会交换,第二个会交换。

这两个例题只是说明如果想做交换,必须使用指针传递。