C语言函数值传递

之前在某高教等级考试书中有这么一题,代码如下:

#include 
#include 
void fun(float *p1,float *p2,float *s)
{
	s=(float *)calloc(1,sizeof(float));
	*s=*p1+*p2++;
}
int main()
{
	float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
	fun(a,b,s);
	printf("%5.2f\n",*s);
	return 0;
}

结果如下:

居然还是未调用函数之前的结果,嗯,我们先把它放在这里。

在学习C语言中我们都知道有这样的例子,交换数据:

#include 
void swap(int a,int b)
{
	int t;
	printf("(2)a=%d  b=%d\n",a,b);  /*调用函数过后形参的值*/
	t=a;a=b;b=t;
	printf("(3)a=%d  b=%d\n",a,b);  /*调用函数内交换后形参的值*/
}
int main()
{
	int a=10,b=20;
	printf("(1)a=%d  b=%d\n",a,b);  /*实参a,b未调用函数时的值*/
	swap(a,b);
	printf("(4)a=%d  b=%d\n",a,b);  /*实参a,b调用后的值*/
	return 0;
}

结果如下:

C语言函数值传递_第1张图片

很明显,交换不成功,我们都知道该怎么改这段程序,把形参改为指针嘛,程序如下:

#include 
void swap(int *a,int *b)
{
	int t;
	printf("(2)a=%d  b=%d\n",*a,*b);   /*调用函数过后形参的值*/
	t=*a;*a=*b;*b=t;
	printf("(3)a=%d  b=%d\n",*a,*b);   /*调用函数内交换后形参的值*/

}
int main()
{
	int a=10,b=20;
	printf("(1)a=%d  b=%d\n",a,b);    /*实参a,b未调用函数时的值*/
	swap(&a,&b);
	printf("(4)a=%

你可能感兴趣的:(C语言,C语言函数)