指向数组的malloc指针

5
int (*p)[2];
p=(int(*))malloc(sizeof(int[2])*100);

如何正确使用 malloc 分配一个数组指针? 我无法理解其中的 (int(*)) 部分。


2
在C语言中应该避免使用 (int(*))。建议不要强制转换 malloc 的返回值。 - another.anon.coward
哦,哇,没有编译错误了,谢谢。 - titus
1
如果你真的非常想要进行强制类型转换,应该使用(int(*)[2])(int(*))表示的是int *。传递给malloc的大小看起来很好(为100个指向包含2个整数数组的指针分配空间)。 - another.anon.coward
非常感谢您,您可以将此作为答案发布。 - titus
我在这里看不到问题。你能更具体地说明一下吗? - 0xbaadf00d
2个回答

9
作为答案发布评论:
C中,您不应该强制转换malloc的返回值。有关为什么在C中对malloc的返回值进行类型转换不是一个好主意的更多信息,请参见此文章。如果出于某种原因您真的想要强制转换,则应该是(int (*)[2])(int (*))int *。向malloc传递的大小看起来很好(分配100个指向2个整数数组的指针的大小)。所以你应该这样做:
int (*p)[2];
p=malloc(sizeof(int[2])*100); 

希望这能帮到你!

-3

不清楚你想要什么。如果你需要100个int对,例如,排列成指向int指针的数组(每个指针指向恰好两个ints),那么你需要在100个指向int的指针上调用malloc 100次,每次分配两个整数。

"malloc a pointer to an array"没有意义。但是你可以使用malloc分配一个数组,并将该地址分配给指针,或者可以malloc指针的数组。但是你提出的问题并不清楚。


1
好的,但是如果我不知道我在运行时需要100个指针怎么办?如果我需要10000个呢?我认为我做得很对。 - titus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接