这个指针类型转换是如何工作的?

时间:2014-09-23 23:07:45

标签: c++ pointers casting

任何人都可以解释以下代码的工作原理吗?我想知道返回变量p的确切值是什么以及如何?

#define MR 3
#define MC 4
int (*p)[MC];
p=(int(*)[MC])malloc(MR*sizeof(*p));

提前致谢。

2 个答案:

答案 0 :(得分:1)

从上到下(注意MC 4MR 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数组的指针。