私は50×50の行列arr[50][50]
を持っており、サブ配列arr[0]
とarr[1]
の値を入れ替える必要があります。 すなわち、各サブアレイの50個の要素全体を交換する必要があります。任意の単純または短い方法があった場合、私は思っていたCの多次元配列のサブ配列を交換する
for(i=0; i<50; ++i)
{
int t = arr[0][i];
arr[0][i] = arr[1][i];
arr[1][i] = t;
}
:これを行うには、私は考えることができる
唯一の方法は次のようにループを使用しているのですか?多分ポインターを使う?
「型 『int型*』から 『[2] int型』と入力して割り当てるときに互換性のない型」私は
int *t = arr[0];
arr[0] = arr[1];
arr[1] = t;
のようなものを試してみましたが、それはおよそ最初の行でエラーが発生しました。 「タイプ 『INT *』から 『INT [50]』型に割り当てるときに互換性のない型」
は、それからアレイint (*t)[50] = arr[0];
arr[0] = arr[1];
arr[1] = t;
私は約二行目でエラーが発生しました。この時間へのポインタを試みました。
第3の変数である 'arr [0] [i] = arr [0] [i]^arr [1] [i]を使う代わりに、xor式を使う方が速いでしょう。 arr [1] [i] = arr [0] [i]^arr [1] [i]; arr [0] [i] = arr [0] [i]^arr [1] [i]; '複雑さは同じですが、定数が変化します。 –
'='でデータをコピーする唯一の方法は、単純な変数、単一の配列要素、または 'struct'からです。 'int temp [50]'と 'memcpy'を使うことを考えてください。 –
行をコピーする(またはスワップする)必要があります。 'int tmp [50];' 'memcpy(tmp、arr [0]、50 * sizeof * tmp)のようなものを使うことができます。 memcpy(arr [0]、arr [1]、50 * sizeof * arr [0]); memcpy(arr [1]、tmp、50 * sizeof * arr [1]); ' –