数组元素作为函数参数的问题

whorus1 2014-03-11 04:37:15
#include<stdio.h>
#define LEN 7
#define k 7

int a[LEN] = {4, 2, 5, 8, 3, 9, 6};

void swap(int c, int b)
{
int tmp;
if (c > b)
{
tmp = c;
c = b;
b = tmp;
}
return;
}

int main()
{
int i, j;
for (i = 0; i < k; i ++)
{
for (j = i + 1; j < LEN; j++)
{
swap(a[i], a[j]);
}
printf ("%d\n",a[k - 1]);
}
printf ("%d\n",a[k - 1]);
return 0;
}


找出一个随机数组中第k小的数,为什么“swap(a[i], a[j]);”之后数组a[]没有重新排序呢?
...全文
163 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whorus1 2014-03-12
  • 打赏
  • 举报
回复
谢谢,改成这样了
void swap(int c, int b) { int tmp; if (a[c] > a[b]) { tmp = a[c]; a[c] = a[b]; a[b] = tmp; }
Falleyes 2014-03-11
  • 打赏
  • 举报
回复
楼主调用函数的时候会在函数被调用时,临时把你的实参复制到函数中进行操作,最终只是这个复制的副本做了交换。 可以使用楼上的引用,也可以使用指针来交换。
void swap(int* a,int* b){
   int* temp=a;
   a=b;
   b=temp;
}
调用的时候:
swap(a,b);
__phoenix 2014-03-11
  • 打赏
  • 举报
回复

void swap(int c, int b)
{
    int tmp;
    if (c > b)
    {
        tmp = c;
        c = b;
        b = tmp;
    }
    return;
}
这个函数在其内部做了变换,但在main中没有作用,应该为:

void swap(int &a, int &b)
{
    int temp = 0;
    if(a > b) {
      temp = a;
      a = b;
      b = a;
    }

}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧