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