実行時に作成された 2 つの整数配列があります (サイズはプログラムの入力によって異なります)。ある時点で、ある配列の内容を他の計算を行う内容で更新する必要があります。
最初に、C で関数を返す方法が見つからなかったため、これらの配列をパラメーターとして関数に渡すことを考えました (それが可能だとは思わないでください)。パラメータはスタックにコピーされるため実際には変更できないため、これは悪い考えであることに気付いた後、代わりに配列ポインタに変更することにしました。
関数はまだ空ですが、これは私が持っているコードです:
1 回目 (コードのコンパイル、エラーなし):
// Elements is just to be able to iterate through their contents (same for both):
void do_stuff(int first[], int second[], int elements) {}
// Call to the function:
do_stuff(first, second, elements);
2 番目のテイクでは、配列をその場で変更できるようにポインターに変換しようとします。
void do_stuff(int *first[], int *second[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
このコードは、正当なコンパイル時エラーにつながります。配列へのポインターであると私が考えていたのは、明らかにポインターの配列だったからです。
3番目のテイク、正しい構文だと思います:
void do_stuff(int (*first)[], int (*second)[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
それでも、配列の要素にアクセスしようとすると、このコードはコンパイル時エラーを生成します (例*first[0]
):
error: invalid use of array with unspecified bounds
私の質問は、関数のパラメーターとして配列ポインターを使用する可能性に関するものですが、可能ですか? もしそうなら、どのようにそれを行うことができますか?
とにかく、2 番目の配列の内容を含む計算を実行した後に最初の配列を更新するより良い方法を考えている場合は、それについてコメントしてください。