一道90%的人都会出错的C语言经典例题,不来测试下?
作者
闫小林
白天搬砖,晚上做梦。我有故事,你有酒么?
题目要求:交换x、y的值,话不多说直接上代码:
#include<stdio.h>
void swap(int x,int y);
int main()
{
int x=3;
int y=4;
swap(x,y);
printf("x=%d y=%d\n",x,y);
return 0;
}
void swap(int x,int y){
int t;
t=x;
x=y;
y=t;
}
请读者仔细阅读一下代码,看看能不能发现逻辑错误。
代码语法是没有一点问题的,编译后如图所示:
但是运行后就出问题,运行结果如图所示:
为什么输出x、y的值没有交换位置呢?
接下来小林仔细分析下这道题:
从第一行到第六行读者应该都可以看懂,就是从第七行开始,swap函数开始,出现了逻辑错误。
第7行swap里面的x、y是实参,调用swap这个函数,要把实参的值传递给第11行swap函数里面的形参。
值传递之后,在swap函数里面x、y实现了位置交换。
但是注意,形参值的变化不会对实参有影响,因为值传递是单向的,只能由实参到形参。
因此第八行输出的x、y还是main函数里面定义的x、y。
那么有办法解决这个问题么?
以上是一个治标不治本的方法。
治本的方法就看这篇文章反响了,看的人多的话后期出一个治本的方法,提一下指针可以解决这个问题。
printf("我看看有多少人想看治本的方法!”)