小腥腥 发表于 2021-3-4 22:05:39

迪迦带着光来了

#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:08:55

为什么不能实现交换

Daniel_Zhang 发表于 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);
}

巴巴鲁 发表于 2021-3-4 22:14:47

值传递:子函数swap()里面进行打印输出时主函数a和b对应的a和b是进行了交换,但是执行到主函数进行打印输出时主函数里面的a和b是没有进行交换的。这是因为主函数的a和b只是赋值给子函数的形参a和b,子函数只是将两个形参进行了交换而没有将主函数的实参a和b进行交换,而且子函数swap()调用完后a、b和t都会自动释放掉。

Daniel_Zhang 发表于 2021-3-4 22:17:44

应该还是作用域的问题?

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

事实上 a b 在 swap 里面是已经互换完成了的,但是因为作用域的关系,所以并不会传回给 main 函数

小腥腥 发表于 2021-3-4 22:19:10

Daniel_Zhang 发表于 2021-3-4 22:11
这是我以前的一个代码

谢谢,感觉楼下解释的更清楚些

Daniel_Zhang 发表于 2021-3-4 22:20:26

小腥腥 发表于 2021-3-4 22:19
谢谢,感觉楼下解释的更清楚些

嗯呢,你能解决问题就好{:10_297:}
页: [1]
查看完整版本: 迪迦带着光来了