2014-10-28 48 views
1

我一直在嘗試使用指針算術在二維(MxM)數組中交換兩個值,但似乎無法掌握涉及的指針魔法。C - 使用指針算術移位多維數組

這裏是我到目前爲止有:

typedef int Marray_t[M][M]; 

void transpose(Marray_t A) { 
    int i, j; 
    int *startAddress = &A[0][0]; 
    for (i=0; i<M; i++) { 
     for (j=0; j<M; j++) { 
      int* y = startAddress + (i*M+j); 
      int* u = startAddress + (j*M+i); 
      int temp; 
      temp = *y; 
      *y = *u; 
      *u = temp; 
     } 
    } 
} 

但是,我似乎是交換指針或指針值,而不是數組在改變實際值。

這裏是我試圖優化較慢版本:

void transpose(Marray_t A) { 
     int i, j; 
     for (i=0; i<M; i++) { 
      for (j=0; j<M; j++) { 
       int temp; 
       temp = A[i][j]; 
       A[i][j] = A[j][i]; 
       A[j][i] = temp; 
      } 
     } 
    } 
+0

得到了使用調試器和跟蹤你的代碼。這使您可以在程序執行過程中檢查所有值,從而使每個井都可以引發啓發。 – alk 2014-10-28 07:08:39

回答

1

你好像換兩次導致成相同的值的值。

你應該重寫循環的

for (i=0; i<M; i++) { 
    for (j=0; j<i; j++) { 

Live example here

+0

我按照你的建議在第二個for循環中換了M。我的代碼突然生效。 – 2014-10-28 04:42:59