我将实际代码中用(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/%dn", ptrdate[0].day, ptrdate[0].mo);
}
将代码编写为
Date *ptrdate = malloc(12 * sizeof(*ptrdate));
或者,更清洁的方法
Date *ptrdate = malloc(12 * sizeof *ptrdate); //sizeof is operator, no need for extra "()"
是更可接受和更可取的,因为它使代码更健壮。即使
ptrdate
的类型将来会发生变化- 将代码与具有单独
typedef
和Date
的任何外部库一起使用(创建冲突)[#]
您不需要更改这部分代码。
此外,推荐的main()
的签名是int main(void)
。
[#]感谢@Elias Van Ootegem先生的以下评论]
这更多的是品味/风格的问题。我更喜欢sizeof(Date)
,因为这对我来说似乎更有可读性。但你可以随心所欲——这里没有真正的区别。