//错误做法:
#include <stdio.h>
void exchange(int, int);
void exchange(int one, int another) {
int tmp;
tmp = one;
one = anthoner;
another = tmp;
}
int main() {
int num1;
int num2;
scanf("%d %d", &num1,&num2);
exchange(num1, num2);
printf("交换结果:%d %d\n", num1, num2);
return 0;
}
/*
exchange函数在调用时,将实参变量num1和实参变量num2空间内的值复制一份赋值给形参
变量one和形参变量another,然后函数对两个形参变量的值进行交换,没有对实参变量
num1和num2空间内的值进行交换,调用完毕后栈顶指针回落,形参变量one和another的空
间不再受系统控制,输出的num1和num2仍然是初始输入的值。
*/
//正确做法:
#include <stdio.h>
void exchange(int *, int *);
void exchange(int *one, int *another) {
int tmp;
tmp =*one;
*one = *anthoner;
*another = tmp;
}
int main() {
int num1;
int num2;
scanf('%d %d', &num1,&num2);
exchange(&num1, &num2);
printf("交换结果:%d %d\n", num1, num2);
return 0;
}
/*
将形参变量的数据类型改成int *,实参变量改成&num1和&num2,此时的函数函数调用是:
把num1和num2所在的空间的首地址值赋值给one和another两个指针变量,即:one指向
num1,another指向num2。
然后把one所指向的空间的值复制一份赋值给tmp,再把another所指向的空间的值赋值给
one所指向的空间,最后再把tmp空间的值赋值给another所指向的空间,即one和another所
指向的空间内的值进行交换。
即使在调用函数之后栈顶指针回落到初始栈顶指针的位置,主函数中num1和num2的值已经
交换。
*/