我正在尝试使用动态分配的内存,就好像它是一个矩阵一样,以使我的代码更易于阅读和解释。
int *mem = (int *) calloc(10, sizeof(int));
*(mem + 5) = 10;
int (*mat)[5][2] = mem;
printf("%d", (*mat)[2][1]);
//Used type 'int[5][2]' where arithmetic or pointer type is required
printf("%d", ((int[5][2])mem)[2][1]);
//Works but i can't figure out why because "int[5][2]" is already a
//pointer so wouldn't "int(*)[5][2]" be the adress of mem?
printf("%d", (* (int (*)[5][2]) (mem))[2][1]);
但是我找不到一种方法将整数数组的指针转换为整数矩阵
我尝试直接投射到矩阵,但似乎类型有问题。
我还尝试通过声明一个指向所述大小的矩阵的指针来欺骗编译器,这可行,但它有点违背了在堆上声明内存然后必须在堆栈上声明一个额外指针的目的。
最后的尝试是转换为数组的指针,然后取消引用它,但这比仅仅转换为矩阵会增加更多的工作和更长的语法,从而破坏了使代码更易于阅读的目的
要将分配的内存用作 5 个 2
int
数组的数组,只需使用指向 2 int
数组的指针,并为其中 5 个数组分配空间:
int (*mat)[2] = calloc(5, sizeof *mat);
以此类推,当您想要一个
int
数组时,您使用指向int
的指针,而不是指向int
数组的指针。在这两种情况下,您使用的类型都是指向数组第一个元素的指针,而不是指向数组的指针。