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

1 つの解決策は、次の 3 つの配列パラメーターを使用することです。

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

次に、マージaしてb、結果を に入れることができますcc関数を呼び出す人は、十分な大きさになるように使用される配列を作成する責任があります。

于 2013-02-10T22:35:20.620 に答える
1

関数が配列を返すようにしたい場合は、2 つの方法があります。

  1. 関数は、配列の最初の項目へのポインターを返す必要があります (実際には、配列自体が C のポインターです)。この場合、関数は として宣言する必要がありますint *merge(int a[], int b[])
  2. 関数自体によって変更される関数に配列を渡す必要があります。これを行う方法は次のとおりint merge(int A[], int B[], int C[])です。
于 2013-02-10T22:34:57.390 に答える
1

ここに3つのアイデアがあります...

  1. C では配列を返すことはできませんが、配列を含むa を返すことができるstructので、それが可能です。
  2. int x[3]; return x;それが static または malloc-ed の場合はx.それで問題ありませんが、通常の auto-storage-class ローカルの場合は恐ろしく失われます。したがって、何をするにしてもmalloc(3)、オブジェクトを関数に含めるか、少なくとも静的にする必要があります。
  3. 新しい配列をパラメーターとして渡すことができるため、それを返す問題を回避できます。
于 2013-02-10T22:41:34.510 に答える