免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1411 | 回复: 6
打印 上一主题 下一主题

关于memset的基础问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-16 09:41 |只看该作者 |倒序浏览
memset(structA, NULL, sizeof(STRUT_A));
memset(structA, 0x00, sizeof(STRUT_A));
memset(structA, '\0', sizeof(STRUT_A));

structA是一个STRUT_A类型的结构体,我们对它初始化的时候常用以上三句话,请问他们有什么区别?

论坛徽章:
0
2 [报告]
发表于 2004-08-16 10:18 |只看该作者

关于memset的基础问题

1.memset(structA, NULL, sizeof(STRUT_A));
  NULL=(void *)0,类型不匹配,可读性差,显然需要编译器进行类型转换,降低了编译效率。多见于自以为懂了点宏和常数而又并没有真懂的家伙,真是“画虎不成反类犬”!
2.memset(structA, 0x00, sizeof(STRUT_A));
  很好的写法!类似的还有memset(structA, 0, sizeof(STRUT_A)),后者在源码上少了3个字节。
3.memset(structA, '\0', sizeof(STRUT_A));
  又一自以为是的表现,谁说structA的成员都是字符型了?虽然地球人都知道'\0'就是0,但绕这么个弯子有必要么?

论坛徽章:
0
3 [报告]
发表于 2004-08-16 10:24 |只看该作者

关于memset的基础问题

memset(structA
应该不对,需要取地址 &structA
后面的应该没有什么区别

论坛徽章:
0
4 [报告]
发表于 2004-08-16 11:05 |只看该作者

关于memset的基础问题

原帖由 "flyingbear" 发表:
memset(structA
应该不对,需要取地址 &structA
后面的应该没有什么区别

呵呵,又一个先入为主的。你知道structA是什么类型?
STRUCT_A *structA还是STRUCT_A structA?
I服了U!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-08-16 12:31 |只看该作者

关于memset的基础问题

原帖由 "FH" 发表:
1.memset(structA, NULL, sizeof(STRUT_A));
  NULL=(void *)0,类型不匹配,可读性差,显然需要编译器进行类型转换,降低了编译效率。多见于自以为懂了点宏和常数而又并没有真懂的家伙,真是“画虎不成反类犬”!
..........


一语见地,简洁、高效。

论坛徽章:
0
6 [报告]
发表于 2004-08-16 13:20 |只看该作者

关于memset的基础问题

原帖由 "FH" 发表:

呵呵,又一个先入为主的。你知道structA是什么类型?
STRUCT_A *structA还是STRUCT_A structA?
I服了U!


请看:‘structA是一个STRUT_A类型的结构体
而不是结构体指针
如果是良好的代码风格而且structA是结构体指针,structA应该写成:pRecStructA
讨论问题而已,不用咄咄逼人。
也许是你“先入为主”了

论坛徽章:
0
7 [报告]
发表于 2004-08-16 13:31 |只看该作者

关于memset的基础问题

在我的程序源代码中,也有这四样,可能是对不同的类型说明来说的罢:
memset(data, 0, sizeof(data),对应是字符数组.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP