我通过在实际代码中用(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);
}
答案 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)
,因为这对我来说似乎更具可读性。但就像你喜欢的那样 - 这里没有真正的区别。