C语言 函数调用 高手进

来源:百度知道 编辑:UC知道 时间:2024/06/08 01:14:47
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函数,是不是可以理解给上面的功能函数可以删去????

第一串代码里有个错误,第九行缺少一个逗号,改为printf("%d,",c[i]);。另外,在C语言中,不加类型说明的函数,一律被视为整型的函数。第一串代码main函数是void型的。main前缺少void,在TC2.0中可以运行,但在TC++3.0和VC++6.0是不能运行的。
至于第一串代码,由于我不知道它是干什么的,所以在我看来定义的那个函数根本没用。因为 for(i=10;i<10;i+=2) fun(c[i],c[i+1]);是不会执行一次循环体的。
如果函数参数是数组,由于形参和实参占用同样的内存单元,所以形参变化,实参也跟着变化。例如:
#include<stdio.h>
void main()
{
void fun(int x[],int y[]);
int c[10]={1,2,3,4,5,6,7,8,9,0},d[10]={0,9,8,7,6,5,4,3,2,1},i;
fun(c,d);
for(i=0;i<10;i++)
printf("%d ",c[i]);//输出数组c[i]中的值
}
void fun(int x[10],int y[10])
{
int i,t=0;
for(i=0;i<10;i++)
{
t=x[i];
x[i]=y[i];
y[i]=t;
}
}
这是我对第一段程序的修改,使它和第二段程序的功能相同。
但对于函数参数是整型等基本类型数据,值的传递是单向,即只能从实参传向形参。
自己定义函数时,无返回值不代表无意义。在指针里很多函数都无返回值,如你的第二段代码。
我不知道说清楚没有,若果没有。我们可以继续探讨。

1.虽然无返回值,但已经交换了c[i],c[i+1]的值;
2.无返回值的函数,常用于处理数据关系(如:显示内容等)
自己想想吧!

调用函数无返回值,但仍改变主函