C语言 函数中实参与形参的传递(VC6.0环境)

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:41:46
在什么情况下,在被调函数中对形参的操作会影想到实参的值?
可以以下面两段程序的结果帮我分析一下:
#include <stdio.h>
void swap (int *a ,int *b)
{
int *t ;
t=a;
a=b;
b=t;
}
main ()
{
int i=3,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
}
结果:35
#include <stdio.h>
void swap (int *a ,int *b)
{
int t ;
t=*a;
*a=*b;
*b=t;
}
main ()
{
int i=3,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
}
结果:5 3
以上结果是在VC6.0环境下得出的,望高手不吝赐教,谢谢!

1,被调函数的形参*a,*b为局部指针变量,函数体的功能是交换
两个指针的的值,形象的说就是以前a指向i,b指向j,交换后就是a指向j,b指向i;所以不改变主调函数的值;

#include <stdio.h>
void swap (int *a ,int *b)
{
int *t ;
t=a; //交换指针a与b的值;注意不是交换他们所指向变量的值;
a=b;
b=t;
}

2,形参*a,*b同样为局部指针变量,但函数体的功能是交换a,b所指向变量i,j的值;

void swap (int *a ,int *b)
{
int t ;
t=*a; //三句的功能:交换a,b所指向变量的值;
*a=*b;
*b=t;
}

上面的例子用到的方法只是传值,下面的是传地址。

void swap (int *a ,int *b)
{
int *t ;
t=a;
a=b;
b=t;
}
上面这个函数是交换参数的地址,但参数的值不变,也就是说存储位置进行了交换.

void swap (int *a ,int *b)
{
int t ;
t=*a;
*a=*b;
*b=t;
}
这个是交换参数的值,故会变化.