用数组调用函数?

标签 c

我对这段代码进行了一些处理,我需要一个交换函数来获取像 a[j] 这样的数组。

我如何需要将这样的东西传输到另一个函数?

#include <stdio.h>
void bubble_sort(int *a, int n) {
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n - i - 1; j++) {
      if (a[j] > a[j + 1]) swap(&a[j], &a[j + 1]);
    }
  }
}

这是代码,那么我如何用a[j]调用swap函数呢?我需要像这样调用函数吗?

int swap (int a[],int b[])
int swap (int *a,int *b)

通过第二次通话,我确信它会起作用,对吗?但是我怎样才能像第一个例子一样调用这个函数呢?

#define MAX 100
#include <stdio.h>

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

void bubble_sort(int a[], int n) {
    int i;
    for(i=0;i<n;i++)
    {
        if(a[i]<a[i+1])
        swap(a[i],a[i+1]);
    }
    return 0;
}

int main()
{
    int a[4]={1,2,3,0};
    int n=4;
    bubble_sort(a,n);
    for(int i=0;i<n;i++)
    {
        printf("%d",a[i]);
    }
}

我使用了该代码段错误(核心转储)

最佳答案

你的函数需要像这样使用2个指针:

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

int swap (int a[], int b[]); 也可以工作,因为在函数参数 int* aint a[] 是同一件事。但这很令人困惑 - 它意味着指针指向一个数组,而您只想交换 2 个整数。

以下是您可以通过其他方式做到这一点的方法:

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

关于用数组调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026351/

相关文章:

核心转储 - 尝试打印最小线程数

c - 在内核重启后保留文件

c - 在 C 中模拟基 native 器语言。

c - fread 段错误仅在少数情况下出现

c - 没有变量名称?

c - 读取逗号分隔的字符串

合并两个共享 (.so) 库

c++ - 以可移植的方式将类导出到 dll,而不使用接口(interface)?

c - 用 C 写 `eval()`

c - brk/sbrk 的不安全/遗留问题是什么?