このタスクには、関数への入力として配列を受け取り、データを抽出することが含まれますそこから、出力として新しい配列を生成します。一見単純そうに見えますが、C ではこの操作に一定の複雑さが伴います。
何よりもまず、 C では組み込み配列を直接返すことが不可能であることに注意することが重要です。それらは固定され、ハードコーディングされているため、受け渡すことができるオブジェクトとして扱うことができません。これは、他の言語に慣れているプログラマにとっては混乱する可能性があります。
この制限を回避するには、次のアプローチを検討してください。
ここでは、両方のアプローチを示すコード スニペットの例を示します。
// STL Vector Example std::vector<int> myfunction(const std::vector<int>& my_array) { std::vector<int> f_array(my_array); // Data manipulation... return f_array; } // Boost Array Example boost::array<int, 2> myfunction(const boost::array<int, 2>& my_array) { boost::array<int, 2> f_array; f_array[0] = my_array[0]; f_array[1] = my_array[1]; // Data manipulation... return f_array; }
これらの例では、STL ベクトル コンストラクターと Boost 配列メンバー関数を利用して、データのコピーを簡素化しています。 process.
さらに注意すべき点は、提供されている元のコードのバグです。
int myfunction(int my_array[1])
my_array を単一の要素で宣言しているにもかかわらず、コードは次のことを試みます。 2 つの要素 (my_array[0] と my_array[1]) にアクセスします。これは典型的なインデックスの範囲外エラーです。適切な宣言は次のようになります:
int myfunction(int my_array[2])
以上がC で関数から新しい配列を返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。