#include<stdio.h>#include<stdlib.h>voidswap(int a,int b){int t;
t = a;
a = b;
b = t;printf("在函数内部交换后的值为:%d %d\n\n", a, b);}intmain(){int m, n;printf("输入两个数字:");scanf("%d %d",&m,&n);printf("\n");swap(m, n);printf("调用swap函数后的值为:%d %d", m, n);return0;}
调用swap()函数时采用值传递,通过函数调用将m 和 n的值分别传给整型变量 a, b,在swap()函数中操作的是 a和 b的值,并不是 m和 n的值,虽然 a, b 的值进行了交换,,但结果不会带回到main()中,所以 m,n 的输出值无变化。
2. 地址传递交换地址失败。
#include<stdio.h>#include<stdlib.h>voidswap(int*a,int*b){int*t;
t = a;
a = b;
b = t;printf("在函数内部交换后的值为:%d %d\n\n",*a,*b);}intmain(){int m, n;printf("输入两个数字:");scanf("%d %d",&m,&n);printf("\n");swap(&m,&n);printf("调用swap函数后的值为:%d %d", m, n);return0;}
swap()函数使用指针 a, b 作形参,但交换的是指针 a,b ,也就是a, b存储的地址值,不是它们指向的整型变量 *a, *b ,函数执行完成后,a 指向 n ,b 指向 m,a和 b的内容发生了变化,而 m和 n的内容并没有改变。
3. 地址传递交换值成功。
#include<stdio.h>#include<stdlib.h>voidswap(int*p,int*s){int t;
t =*p;*p =*s;*s = t;printf("在函数内部交换后的值为:%d %d\n\n",*p,*s);}intmain(){int m, n;printf("输入两个数字:");scanf("%d %d",&m,&n);printf("\n");swap(&m,&n);printf("调用swap函数后的值为:%d %d", m, n);return0;}