前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道90%的人都会出错的C语言经典例题,不来测试下?

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

作者头像
小林C语言
发布2020-04-07 16:36:55
4620
发布2020-04-07 16:36:55
举报

作者

闫小林

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

题目要求:交换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=%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。

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档