-1

私はC非常に単純なプログラムを学び、書こうとしています。これが私のコードです:

#include <stdio.h>

int[] getNumbers( int x, int y, int z );

int main() {
    int[] theNumbers = getNumbers(5,6,7);
    return 0;
}

int[] getNumbers( int x, int y, int z) {
    int[] numbers = { x, y, z };
    return numbers;
}

私の問題が何であるかわかりません。

4

3 に答える 3

2

で配列を宣言する方法は次のCとおりです。

int a[SIZE];

[あなたが投稿した例は、配列C#java宣言する方法です]

また、他の人が指摘したように、投稿されたコードにはいくつかの問題があります。

  • 配列を返すことはできませんC(配列または構造体へのポインターのみ)
  • ローカル変数への参照を返すべきではありません (代わりに malloc() を使用してください)。
于 2013-08-24T00:54:52.110 に答える
1

C で動作するアプローチの例を次に示します。おそらくもっと良いアプローチがありますが、実際の目標が何であるかは不明です。これは、あなたがやろうとしていたことを処理するいくつかの方法を示しているにすぎませんが、C の作業においてです。C は、Java のような言語よりも厳密で明示的になります。Java はたまたま C/C++ からいくつかの構文を取り入れたにすぎません。

#include <stdio.h>

typedef struct { int a[3]; } int_array;

int_array getNumbers( int x, int y, int z );

int main() {
    int_array theNumbers = getNumbers(5,6,7);
    printf( "%d, %d, %d\n", theNumbers.a[0], theNumbers.a[1], theNumbers.a[2] );
    return 0;
}

int_array getNumbers( int x, int y, int z) {
    int_array numbers = { x, y, z };
    return numbers;
}
于 2013-08-24T01:02:44.017 に答える
1

C では配列を返すことはできませんが、配列ポインターを返すことはできます。

#include <stdio.h>
#include <stdlib.h>

int* getNumbers(int x, int y, int z)
{
    int *num_arr     = malloc(3 * sizeof(int));
    *(num_arr)       = x;
    *(num_arr + 1)   = y;
    *(num_arr + 2)   = z;

    return num_arr;
}

int main(int argc, char **argv)
{
    int *a;
    a = getNumbers(5, 6, 7);

    // printf("%d %d %d\n", a[0], a[1], a[2]);

    return 0;
}
于 2013-08-24T01:08:17.773 に答える