【发布时间】:2014-10-28 04:10:36
【问题描述】:
我一直在尝试使用指针算法交换二维 (MxM) 数组中的两个值,但似乎无法掌握所涉及的指针魔法。
这是我目前得到的:
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;
}
}
}
【问题讨论】:
-
使用调试器并跟踪您的代码。这使您能够在程序执行期间检查所有值,这反过来可能会带来启发。
标签: c arrays pointers multidimensional-array transpose