鱼C论坛

 找回密码
 立即注册
查看: 1574|回复: 6

[已解决]迪迦带着光来了

[复制链接]
发表于 2021-3-4 22:05:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int swap(int a,int b);
int main()
        {
        int a,b;
        scanf("%d %d",&a,&b);
        swap(a,b);
        printf("%d,%d",a,b);
        return 0;
         }
int swap(int a,int b)
{
        int t;
        t=a;
        a=b;
        b=t;
       
}         
最佳答案
2021-3-4 22:14:47
值传递:子函数swap()里面进行打印输出时主函数a和b对应的a和b是进行了交换,但是执行到主函数进行打印输出时主函数里面的a和b是没有进行交换的。这是因为主函数的a和b只是赋值给子函数的形参a和b,子函数只是将两个形参进行了交换而没有将主函数的实参a和b进行交换,而且子函数swap()调用完后a、b和t都会自动释放掉。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-4 22:08:55 | 显示全部楼层
为什么不能实现交换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 22:11:05 | 显示全部楼层
这是我以前的一个代码
// c
#include <stdio.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main(void)
{
    int a = 3, b = 5;

    printf("交换前, a = %d, b = %d\n", a, b);

    swap(&a, &b);

    printf("交换后, a = %d, b = %d\n", a, b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 22:14:47 | 显示全部楼层    本楼为最佳答案   
值传递:子函数swap()里面进行打印输出时主函数a和b对应的a和b是进行了交换,但是执行到主函数进行打印输出时主函数里面的a和b是没有进行交换的。这是因为主函数的a和b只是赋值给子函数的形参a和b,子函数只是将两个形参进行了交换而没有将主函数的实参a和b进行交换,而且子函数swap()调用完后a、b和t都会自动释放掉。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 22:17:44 | 显示全部楼层
应该还是作用域的问题?

你可以在 swap 里面打印一下 a b

事实上 a b 在 swap 里面是已经互换完成了的,但是因为作用域的关系,所以并不会传回给 main 函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-4 22:19:10 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-4 22:11
这是我以前的一个代码

谢谢,感觉楼下解释的更清楚些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 22:20:26 | 显示全部楼层
小腥腥 发表于 2021-3-4 22:19
谢谢,感觉楼下解释的更清楚些

嗯呢,你能解决问题就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 02:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表