任何人都可以解释以下代码的工作原理吗?我想知道返回变量p的确切值是什么以及如何?
#define MR 3
#define MC 4
int (*p)[MC];
p=(int(*)[MC])malloc(MR*sizeof(*p));
提前致谢。
答案 0 :(得分:1)
从上到下(注意MC 4
和MR 3
)
int (*p)[MC];
将p
声明为指向4 int
数组的指针。
sizeof(*p)
4 int
MR*sizeof(*p)
3 *(4 int
数组的大小),即 12 连续int
值。
最后,演员:
p=(int(*)[MC])malloc(MR*sizeof(*p));
只是将void*
返回的基础malloc
强制转换为赋值左值的指针类型,即指针p
。
最后,这个动态在一个动态连续的内存块中分配一个数组(dim = 3)的int
数组(dim = 4)。如果将其分配为自动变量,则相当于:
int p[MR][MC]
因为你问它是如何运作的。糟糕。这是C ++。它应该完成:
std::vector<std::array<int,MC>> ar(MR);
答案 1 :(得分:0)
p
是“指向大小为MC
的int数组的指针”类型的变量。 sizeof(*p)
的大小为MC
整数。实际上,p
现在是指向包含MR
行和MC
列的2D数组的指针。