{0}和calloc之间的区别?
正如
this answer on another question所述,使用聚合初始化
struct foo { size_t a; size_t b; }; struct foo bar = {0}; 导致内置类型初始化为零. 使用上面和使用之间有什么区别 struct foo * bar2 = calloc(1,sizeof(struct foo)); 撇开一个变量是一个指针的事实. 以上两个例子有什么区别,有任何问题或隐藏的问题吗? 解决方法
是的,有一个关键的区别(除了struct foo类型的对象的存储类):
struct foo bar = {0}; struct foo * bar2 = calloc(1,sizeof *bar2); bar的每个成员都是零初始化的(并且对于没有初始化程序的子对象,或者如果bar是static或thread_local存储类,则填充为零), 无效指针(T *)0和值为0的浮点数都不能保证为全位-0. 浮点格式可能不是IEEE754. (在大多数现代系统中,你可以忽略这种可能性.) 引自c-faq(感谢Jim Balter for linking it):
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |