为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
雀和羽 2018-10-16 16:09:50
#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;}
查看完整描述

3 回答

?
onemoo

TA贡献883条经验 获得超454个赞

你是希望 swap 函数交换两个参数的值吗?  如果是的话,那么很遗憾,这样的 swap 无法实现这个功能。


函数传参是“值传递”,也就是说函数中的形参的值是“拷贝”了调用函数时的实参值,在函数中操作形参并不会影响外面的实参。你在 swap 函数中交换了形参 a b 的值,但这不会影响实参——也就是数组中元素的值。


函数参数的值传递是很重要的一个知识点,一般来说,你能写出 swap 这样的函数意味着你已经学过这个知识点了。如果你确实学过了这个,那你可能需要再复习一下相关知识。


还有,swap 函数根本没有必要返回值。

查看完整回答
1 反对 回复 2018-10-16
?
雪落无痕ol

TA贡献13条经验 获得超2个赞

执行swap需要的条件是“a[i] > a[j]", 尝试在scanf的时候输入不同顺序的数

查看完整回答
反对 回复 2018-10-16
  • 3 回答
  • 1 关注
  • 1069 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信