专栏首页C语言入门到精通一道90%的人都会出错的C语言经典例题,不来测试下?

一道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。

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

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

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

本文分享自微信公众号 - C语言入门到精通(gh_780327809188),作者:闫小林

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基础知识 | 每日一练(3)

    ——菜根谭

    C语言入门到精通
  • C语言 | 选择1或2输出max或min

    例36:C语言实现输入两个整数,然后让用户选择1或者2,选择1是调用max,输出两者中的大数,选择2是调用min,输出两者中的小数。

    C语言入门到精通
  • 基础知识 | 每日一练(193)

    cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;

    C语言入门到精通
  • OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用

    MiChong
  • 每日一题C++版(合唱队)

    编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化...

    小白学视觉
  • Java BufferedImage的基本用法

    用户5927264
  • 关于Android图片资源瘦身的奇思妙想

    替换掉系统的压缩算法。如果你不嫌麻烦和喜欢折腾的话可以在你的apk使用一下,效果还是非常显著的。

    况鹰
  • 将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解

    几年前,彭博工程公司决定采用 TypeScript 作为一等语言。本文分享了我们在这一旅程中学到的一些见解和教训。

    深度学习与Python
  • 开发 | 小程序如何快速适配 iPhone X?

    但是,由于 iPhone X 的「异型」屏幕,以及底部的「小白条」的存在,不少开发者都头疼应该如何适配这块略显奇怪的屏幕。

    知晓君
  • 用Java交换两个元素的swap函数

    我在一项目中要用到 大量的元素交换,于是必须写一个交换两个元素的swap函数,众所周知,Java中的基本元素是不支持传址的,必须是对象或数组才能传址(引用),我...

    用户7886150

扫码关注云+社区

领取腾讯云代金券