猿问

请教大佬!数组里的数没有经过函数调用的过程就直接输出了,什么原因?


#include<stdio.h>

void main()

{

    int swap(int a,int b);

    int a[100],i,j;

    printf("please enter four numbers:\n");

    for(i=0;i<4;i++)

    {

        scanf("%d",&a[i]);

    }

    for(i=0;i<3;i++)

    {

        for(j=i+1;j<4;j++)

        {

            if(a[i]>a[j])

            {

                swap(a[i],a[j]);

            }

        }

    }

    for(i=0;i<4;i++)

    {

        printf("%d\t",a[i]);

    }

        printf("\n");

   }


int swap(int a,int b)

{

    int temp;

    temp=a;

    a=b;

    b=temp;

    return 0;

}


雀和羽
浏览 1070回答 3
3回答

onemoo

你是希望 swap 函数交换两个参数的值吗?  如果是的话,那么很遗憾,这样的 swap 无法实现这个功能。函数传参是“值传递”,也就是说函数中的形参的值是“拷贝”了调用函数时的实参值,在函数中操作形参并不会影响外面的实参。你在 swap 函数中交换了形参 a b 的值,但这不会影响实参——也就是数组中元素的值。函数参数的值传递是很重要的一个知识点,一般来说,你能写出 swap 这样的函数意味着你已经学过这个知识点了。如果你确实学过了这个,那你可能需要再复习一下相关知识。还有,swap 函数根本没有必要返回值。

雪落无痕ol

执行swap需要的条件是“a[i] > a[j]", 尝试在scanf的时候输入不同顺序的数
随时随地看视频慕课网APP
我要回答