我有一個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]);' –