一道90%的人都会出错的C语言经典例题,不来测试下?

2020-04-07 16:36:55 浏览数 (1)

作者

闫小林

白天搬砖,晚上做梦。我有故事,你有酒么?

题目要求:交换x、y的值,话不多说直接上代码:

代码语言:javascript复制
#include<stdio.h>
void swap(int x,int y); 
int main()
{
    int x=3;
    int y=4;
    swap(x,y);
    printf("x=%d y=%dn",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。

那么有办法解决这个问题么?

以上是一个治标不治本的方法。

治本的方法就看这篇文章反响了,看的人多的话后期出一个治本的方法,提一下指针可以解决这个问题。

0 人点赞