在头文件 - gameboard.h - 我有一个名为gameboard的结构。在这个结构中我声明square **squares
,其中 squares 如下:typedef enum {EMPTY, RED_COIN, YELLOW_COIN} square;
在 gameboard.c 中,我有一个为二维数组分配内存的函数。在这个函数中,我声明gameboard* result
.
问题:创建初始数组时,即存储数组的二维部分,为什么我不能这样做:
result->squares = malloc(numRows * sizeof(result->square*));
更具体地说,为什么square是无效类型?
您不能“这样做”,因为您的result->square
子表达式无效。result->squares
将是有效的。平原square
也将有效。但result->square
完全没有意义。C->
中的成员访问运算符。并且您的结构类型没有名为square
.
用于malloc
-ing 对象数组的典型/惯用 C 代码如下所示
some_pointer = malloc(n_elements * sizeof *some_pointer);
将此应用于您的案例,我们得到
result->squares = malloc(numRows * sizeof *result->squares);
如果您result->squares
有类型square **
,那么适当的大小也可以表示sizeof(array_element_type)
为
result->squares = malloc(numRows * sizeof(squares *));
但是前一个(类型不可知)变体可以说比后一个版本更好,特别是对于类型不可知。另请参阅:为什么在 malloc 中使用 sizeof(*pointer) 更安全
我sizeof(result->square*)
完全不清楚你是如何到达的。您的变体看起来像是两者的奇怪混合体,以不正确且毫无意义的方式编写。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句