親愛なるCプログラミングユーザーの皆さん、入力と出力の両方が配列するC関数を使用してCプログラムを作成するにはどうすればよいですか?
具体的には、2つの4x4行列を入力として与えたい場合、関数はその2つの行列を乗算し、結果の行列の出力を再び4x4行列サイズにしますか?(たとえば、入力はAとB、出力はDです。A(4x4)* B(4x4)= D(4x4))。
2つの行列を乗算できるメインプログラムコードを見つけて記述しました。しかし、それをC関数に入れることはできませんでした。C関数は数値のみを出力し、配列や行列は出力しないことを学びました。
Cプログラミングでその問題を回避するにはどうすればよいですか?
前もって感謝します。
両方の配列をポインターとして関数に渡す必要があります。これは、対応する配列の名前を渡すだけで簡単に実現できます。戻り値 'value'に関しては、さらに別の配列へのポインターを返すように関数を定義することができます。しかし、そこには問題があります。誰がそのアレイを所有しているのでしょうか。実際には、2つ(3つ)の実行可能なオプションがあります。
1)出力配列をグローバル変数として宣言します。良い習慣ではありません。
2)両方のソース配列と同じ場所で出力配列を宣言し、その出力配列のアドレスを3番目のパラメーターとして関数に渡します。
3)(非推奨です!)関数内で出力配列を静的として宣言し、それへのポインターを返すことができます。
PS:実際には他に2つの方法がありますが、混乱させないでください。
1)ちょっとしたトリックで、実際に配列全体を関数に渡すことができます。配列を構造体に入れることができます。構造体は(すべてのコンテンツとともに)値によって渡されます。ただし、個人的にはこれはエレガントではなく、配列を含む構造体のすべてをスタックにコピーする必要があるため、パフォーマンスが低下します。
2)関数は、出力配列をヒープに動的に(mallocまたはcallocを使用して)割り当て、その配列へのポインターを返すことができます。ただし、これにより、関数の呼び出し元は後でそのメモリを再びfree()することになり、それは非常に簡単に見落とされます。これにより、メモリリークが発生します。また、ヒープの割り当ては、処理時間の点で非常に高価です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加