我有一个50 x 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 *t = arr[0];
arr[0] = arr[1];
arr[1] = t;
,但大约在第一行的“不兼容的类型分配到类型‘INT [2]’从类型‘诠释*’时”给了错误。
然后我“分配给从类型‘诠释*’输入‘INT [50]’时不兼容的类型”试图指针数组
int (*t)[50] = arr[0];
arr[0] = arr[1];
arr[1] = t;
这次我在约第二行有误差。
嗯更快的方法将是使用而不是使用第三可变XOR表达 - 'ARR [0] [I] = ARR [0] [I]^ARR [1] [I]; 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]);' –