【发布时间】:2018-12-29 19:49:33
【问题描述】:
假设有一个包含指向数组的指针及其大小的结构,如下所示:
typedef struct {
int * array;
int arr_size;
}IntArray;
如果想把它放在另一个结构中,可以通过两种方式完成:
typedef struct{
IntArray ia;
//other variables
}Base1;
typedef struct{
IntArray * ia;
//other variables
}Base2;
当我动态分配Base1 和Base2(例如Base1 b1 = (Base1 *)malloc(sizeof(Base1));)时会发生什么,为什么我应该选择一种方式而不是另一种方式?
【问题讨论】:
-
“它可以通过两种方式完成”——这两个不同的结构非常非常不同。
-
始终努力使用更少的指针。如果你能解释为什么你绝对需要一个指针,那就太好了。如果你不能,你就不需要它。因此,除非您出于某种特定原因需要 Base2,否则 Base1 可以防御。
-
@n.m.如果
array具有已知大小,则该数组也可以就地存在:int array[1234]完全避免动态分配(或指向堆栈分配的数组)。
标签: c struct dynamic-allocation