【发布时间】:2020-03-30 23:19:57
【问题描述】:
我想交换 2D 结构数组的整个列和行。
使用此代码,我可以交换行:
#define N 9
typedef struct {
char number;
bool editable;
} FIELD;
int main(){
FIELD **f = (FIELD **) malloc(N * sizeof(FIELD *));
for (i=0; i<N; i++) {
f[i] = (FIELD *) malloc(N * sizeof(FIELD));
}
//example: swap row 0 and row 8
FIELD *tmp;
tmp = f[0];
f[0] = f[8];
f[8] = tmp;
}
但是我怎样才能交换一整列呢?
【问题讨论】:
-
请使用 C 或 C++ 标签,具体取决于您编码的语言。不要同时使用这两种语言,因为它们是不同的语言,并且可能有不同的解决方案。
-
您必须交换列中的每个单独的值才能实现目标
-
贴出的代码无法编译!除其他外,它缺少所需的
#include语句。 -
OT:关于:
FIELD **f = (FIELD **) malloc(N * sizeof(FIELD *));和类似的语句: 1) 在 C 中,返回的类型是void*,可以分配给任何指针。强制转换只会使代码混乱。 2) 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功,调用perror()将你的错误信息和系统认为发生错误的文字原因输出到stderr。 3) 退出程序前,每次内存分配调用free(),避免内存泄漏 -
由于
free()正确处理包含NULL的参数,因此使用calloc()进行初始分配要好得多,因此在释放分配时不需要跟踪成功分配的数量跨度>
标签: c arrays algorithm pointers