求教一下 memset函数的使用

风飘过的宁静 2014-05-23 01:56:22
int a[100];
memset(a, 0, sizeof(a);这样清零是正确的 不过memset(a, 1, sizeof(a));就是错误的了 大概看了一下百度说因为是按位运算的原因
我自己又试了一个这样的memset(a, -1, sizeof(a));然后我把结果输出来 是-1!!!!我想问一下要是我想把a数组全赋值为-1这样用可以吗?
...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
风飘过的宁静 2014-05-27
  • 打赏
  • 举报
回复
引用 1 楼 gzliudan 的回复:
int在32位平台下一般是4个字节,memset是以字节为单位运算的,不是按位运算的。执行完 memset(a, 1, sizeof(a)) 后,每个字节都是1,4个为1的字节组装为1个int,对a来说每个元素等于 ( 1 << 24 ) + ( 1 << 16 ) + (1 << 8 ) + 1 = 16843009。执行完 memset(a, -1, sizeof(a)) 后,每个字节都是255,4个255组装为1个int,对a来说每个元素等于 ( 255 << 24 ) + ( 255 << 16 ) + ( 255 << 8 ) + 255 = 0xFFFFFFFF,转为int就是 -1。不为0的情况下,考虑到可移植性,最好还是用循环来赋值。
谢谢 恩 这样知道这个函数赋值怎么回事了
缘中人 2014-05-26
  • 打赏
  • 举报
回复
精神可嘉
CCED136 2014-05-23
  • 打赏
  • 举报
回复
只要记住 memset 是按字节进行处理就行了
gzliudan 2014-05-23
  • 打赏
  • 举报
回复
int在32位平台下一般是4个字节,memset是以字节为单位运算的,不是按位运算的。执行完 memset(a, 1, sizeof(a)) 后,每个字节都是1,4个为1的字节组装为1个int,对a来说每个元素等于 ( 1 << 24 ) + ( 1 << 16 ) + (1 << 8 ) + 1 = 16843009。执行完 memset(a, -1, sizeof(a)) 后,每个字节都是255,4个255组装为1个int,对a来说每个元素等于 ( 255 << 24 ) + ( 255 << 16 ) + ( 255 << 8 ) + 255 = 0xFFFFFFFF,转为int就是 -1。不为0的情况下,考虑到可移植性,最好还是用循环来赋值。
ccrun.com 2014-05-23
  • 打赏
  • 举报
回复
引用 3 楼 bigfog 的回复:
int a[100]; memset(a, 0, sizeof(int)*100);//对数组大小,应该这样表示
不需要这样。sizeof(a) 返回的就是 100个int对象占用的空间,也就是400字节。 一楼已经给出了正确的解释。
bigfog 2014-05-23
  • 打赏
  • 举报
回复
int a[100]; memset(a, 0, sizeof(int)*100);//对数组大小,应该这样表示

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧