1

如何将数组从函数传递到C中的main?

#include<stdio.h>
int merge(int a[],int b[])
{
    int i=0;
    int j=0;    
    int k=0;
    int c[17];
    while(i<10&&j<8)
    {
        if(a[i]<b[j])
        {

            c[k]=a[i];
            i++;
        }
        else
        {
            c[k]=b[j];
            j++;
        }
        k++;
    }
    while(i<10)
    {
        c[k]=a[i];
        i++;
        k++;
    }
    while(j<10)
    {
        c[k]=b[j];
        j++;
        k++;
    }
    return c;
}
4

3 回答 3

2

一种解决方案是采用三个数组参数:

void merge(int a[], int b[], int c[]);

然后你可以合并ab把结果放入c. 调用函数的人负责创建c足够大的数组。

于 2013-02-10T22:35:20.620 回答
1

如果你想让你的函数返回数组,有两种方法:

  1. 该函数必须返回指向数组中第一项的指针(实际上数组本身是 C 中的指针)。在这种情况下,您的函数必须声明为int *merge(int a[], int b[]).
  2. 您必须将数组传递给将由函数本身修改的函数。您可以这样做:int merge(int A[], int B[], int C[]).
于 2013-02-10T22:34:57.390 回答
1

这里有三个想法...

  1. 您不能在 C 中返回数组,但可以返回struct包含数组的 a,因此您可以这样做。
  2. 如果您只是说如果它是静态或 malloc-edint x[3]; return x;将返回x.That's OK 的地址,但如果它是普通的自动存储类本地,则会严重丢失。所以无论你做什么,你都应该malloc(3)在函数中使用对象,或者至少让它成为静态的。
  3. 您可以将新数组作为参数传递,从而避免返回它的问题。
于 2013-02-10T22:41:34.510 回答