关于函数实参和形参的地址传送

来源:互联网 发布:淘宝美工累不累 编辑:程序博客网 时间:2024/06/05 19:34

编写一个函数实现交换两个数的值


void swap(int a,int b)
{
int t;
t = a;
a = b;
b= t;
}
#include<stdio.h>
int main()
{
    int i = 5;
    int j = 6;
    printf("交换前: i = %d,j = %d\n",i,j);
    swap(i,j);
    printf("交换后: i = %d,j = %d\n",i,j);
    return 0;
}


运行结果:

交换前: i = 5,j = 6

交换后: i = 5,j = 6

为什么会这样呢?

c语言的函数参数从功能上可以分为数值型参数和地址型参数,这里是数值型参数,在主调函数发生调用时计算机将实参的值计算出,然后传给形参,然后实参形参就没有关系了,在上面的程序中,当i和j的值传给a和b之后,a b和i j就没有关系了,在执行被调函数swap()时,只是交换了形参a b的值,却不影响实参i j的值,所以输出时i j的值并没有改变。

要想交换两个整数的值,应该用地址型参数来实现,如下函数:

void swap(int a[2])
{
int t;
t = a[0];
a[0] = a[1];
a[1] = t;
}
#include<stdio.h>
int main()
{
    int x[] = {5,6};
    int j = 6;
    printf("交换前: x[0] = %d,x[1] = %d\n",x[0],x[1]);
    swap(x);
    printf("交换后: x[0] = %d,x[1] = %d\n",x[0],x[1]);
    return 0;
}

交换前: x[0] = 5,x[1] = 6

交换后: x[0] = 6,x[1] = 5

函数swap()的形参实参都是数组名,数组名是地址,这种传送就是地址传送,交换时是交换的地址,地址又指向两个整数,所以整数也交换了。

0 0
原创粉丝点击