1

コンピュータサイエンスのクラスで、複数の配列を返す必要のあるプログラムを書いている課題があります。技術的にはこれは問題なく実行できますが、割り当ての設定方法により、特定のことを測定することが困難になります。

基本的に、関数内で2つの配列と1つの変数を宣言し、main()それらを。という関数に送信する必要がありますinput()

Input()NumberOfYears、、、Year[NumberOfYears]の3つを取り上げますDataForYear[NumberOfYears]NumberOfYearsを使用して取得されます。これにより、 forとを使用するループが実行されるscanf()回数が決まります。そして、私が行う方法を知っている同じステートメントを使用する必要があります。for()scanf()Year[]DataForYear[]Year[]DataForYear[]scanf()

output()これらすべてを実行した後、基本的printf()にユーザーが私に与えたすべての値(being Year[]and )を呼び出す関数を作成する必要がありますDataForYear[]。ただし、両方の配列をmain関数とに戻す方法が必要NumberOfYearsです。これは構造体と呼ばれるものを使用して実行できると聞きましたが、まだこれを学習しておらず、私のインストラクターは承認しないと確信しています。

インストラクターのメモでは、main関数にのみ戻る必要があると示唆されていNumberOfYearsましたが、これがどのように可能であるかはわかりません。output()私がこれらのものを返却せずに渡すことができる方法があれば、それは素晴らしいことです。そうでなければ、私はこれを行うための何らかの方法が必要であり、プログラムの残りの部分は歴史です。

4

2 に答える 2

1

関数は、パラメーターとその戻り値を介して戻ることができます。

int doMyThing( int *somethingElse ) {
    *somethingElse = 40;
    return 2;
}

int main( void ) {
    int a;
    int b = doMyThing( &a );
    printf( stdout, "%d\n", a + b ); // prints "42"
}

そして、、または必要なものを使用して、それを配列に拡張できint **somethingElseます。

于 2013-03-06T01:04:36.473 に答える
0

Cでは、「配列」を渡すときはいつでも、実際にはポインターを渡します。int*したがって、返す必要のある配列のタイプに応じて、リターンタイプはのようになります。&x必要に応じて、変数のアドレスx(配列の最初の要素など)を取得するために使用できます。

もう1つの可能性は、ポインターを渡すので、実際にポインターを返す必要さえないということです。関数内で配列をinput変更し、その後、main作業を​​行わなくても配列が変更されていることを確認できます。

于 2013-03-06T01:02:44.497 に答える