上一文讨论了C语言:任意输入两个整数,交换并输出(合集)。
但随着进一步学习,会遇到考察不同小细节的新奇题目。是值得大家更深刻的去辨析的。
感兴趣可以直接去学习。
本文直接补充(错误辨析版)地址交换这种特殊情况,为什么不去直接修改上一篇文章呢?因为我想水一篇!但是质量可不水!hahaha
(错误辨析版)地址交换,强调与地址的交换而不是地址的传递!这是不能完成数值交换的本质原因!
#include<stdio.h>
void swap(int *a,int *b);
int main()
{
int i,j;
scanf("%d%d",&i,&j);
int *p=&i,*q=&j;
swap(p,q);
printf("%d%d\n",*p,*q);
return 0;
}
void swap(int *a,int *b)
{
int *t;
t=a;a=b;b=t;
}
问输入10 5后程序输出什么样的结果?小编做这题时,自信慢慢,哟~考察指针的地址传递了,有了上次的教训和学习,最终又填入了错误答案510!
理论实践
其实是没真正的明白其中的逻辑!将容易弄混的代码放在一起,大家观察比较!
第二个是可以实现交换的(地址传递)
#include<stdio.h>
void swap(int *a,int *b);
int main()
{
int i,j;
scanf("%d%d",&i,&j);
int *p=&i,*q=&j;
swap(p,q);
printf("%d%d\n",*p,*q);
return 0;
}
void swap(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
理论实践
其实很容易看出来,是自定义swap中不同。
地址交换中swap定义了新的指针*t,而地址传递中swap定义了新的整形t(上一篇解释过如有需要C语言:任意输入两个整数,交换并输出(合集))。
为什么不能实现呢?
函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果仍为105。
其他视图说明
两个人从监狱的窗户往外看,一个看见了土地,一个看见了星星。——徐伦
希望对你有帮助,语言学习贵在坚持输入和输出!