使用指向其结构的指针或结构本身来分配内存是否更好?

时间:2015-04-23 11:06:10

标签: c malloc

我通过在实际代码中用(1)替换标有(1)的行来获得相同的值:

Date *ptrdate = malloc(12 * sizeof(*ptrdate));

问题:哪一个更好,为什么?

这是我的实际代码:

typedef struct {
    int day;
    int mo;
} Date;

void main(){
    Date *ptrdate = malloc(12 * sizeof(Date)); //(1)

    ptrdate[0].day=26;
    ptrdate[0].mo=5;
    printf("Date:%d/%d\n", ptrdate[0].day, ptrdate[0].mo);
}

2 个答案:

答案 0 :(得分:7)

将代码编写为

Date *ptrdate = malloc(12 * sizeof(*ptrdate));

或更清洁的方法

Date *ptrdate = malloc(12 * sizeof *ptrdate);  //sizeof is operator, no need for extra "()"

更容易接受,因为它使代码更加健壮。即使

  • ptrdate的类型将来会发生变化
  • 使用代码以及任何具有单独typedef ed Date(创建冲突)的外部库 [#]

您不需要更改此部分代码。

此外,main()的推荐签名为int main(void)

[#]感谢 @Elias Van Ootegem 先生发表以下评论]

答案 1 :(得分:1)

这更像是品味/风格的问题。我更喜欢sizeof(Date),因为这对我来说似乎更具可读性。但就像你喜欢的那样 - 这里没有真正的区别。