我们都知道在函数调用中,参数传递的方式有传值和传地址之分,如果主函数传递给子函数参数时采用传地址的方式,主函数的变量值一定会变化吗?请先看下面的程序:
程序1
#include<stdio.h>
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
int main(void)
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
程序2
#include<stdio.h>
void swap(int *x,int *y)
{
int *t;
t=x;
x=y;
y=t;
}
int main(void)
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
以上两个程序是不是都会改变主函数中a和b两个变量的值,并输出a=20,b=10呢?
接下来,分析一下两个程序:
先分析程序1,在交换语句执行前的状况如图1所示:
(图1)
交换的内容是*x和*y,实际交换的内容是变量a和b的值,交换语句执行后的状况如图2:
(图2)
所以,在主程序中输出的内容是a=20,b=10。
接下来看看程序2,由于传递参数的方式与程序1完全一样,所以交换语句执行前的状态与程序1中交换语句执行前的状况一样,如图1所示。
但是,程序2中交换的内容是x和y,也就是这两个变量内所存储的地址值,所以交换语句执行后的结果如图3所示:
(图3)
程序2中变量a和b的值并没有改变,输出的结果为a=10,b=20。
所以程序1中变量a和b的值发生了交换,程序2中变量a和b的值没有交换,你的想法与我的一样吗?
我们都知道在函数调用中,参数传递的方式有传值和传地址之分,如果主函数传递给子函数参数时采用传地址的方式,主函数的变量值一定会变化吗?请先看下面的程序:
程序1
#include<stdio.h>
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
int main(void)
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
程序2
#include<stdio.h>
void swap(int *x,int *y)
{
int *t;
t=x;
x=y;
y=t;
}
int main(void)
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
以上两个程序是不是都会改变主函数中a和b两个变量的值,并输出a=20,b=10呢?
接下来,分析一下两个程序:
先分析程序1,在交换语句执行前的状况如图1所示:
(图1)
交换的内容是*x和*y,实际交换的内容是变量a和b的值,交换语句执行后的状况如图2:
(图2)
所以,在主程序中输出的内容是a=20,b=10。
接下来看看程序2,由于传递参数的方式与程序1完全一样,所以交换语句执行前的状态与程序1中交换语句执行前的状况一样,如图1所示。
但是,程序2中交换的内容是x和y,也就是这两个变量内所存储的地址值,所以交换语句执行后的结果如图3所示:
(图3)
程序2中变量a和b的值并没有改变,输出的结果为a=10,b=20。
所以程序1中变量a和b的值发生了交换,程序2中变量a和b的值没有交换,你的想法与我的一样吗?