memset为int型数组初始化问题

projoy 2009-07-09 04:15:07
memset不能为int型数组初始化吗?如
int a[100];
memset(a,1,sizeof(a));
可是a却被赋值成168430090,168430090.。。。。。。。。。
这是怎么回事?
...全文
3272 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
dos5gw 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nbnitboy 的回复:]

就是对a指向的内存的sizeof(a)个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是1000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
[/Quote]
正解
ahuisafe 2009-07-10
  • 打赏
  • 举报
回复
memset 第二个参数指定的是char型的数组
故1为int型字节数不同
而分配是按内存的
所以不行
kloze11 2009-07-10
  • 打赏
  • 举报
回复
原来是按字节初始化的
SOS724164054 2009-07-10
  • 打赏
  • 举报
回复
用循环初始化整形!
Treazy 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 taodm 的回复:]
呃,多少人栽在过memset、memcpy上呀。没认真看过函数说明呀。
这是每个人的成长之路上必经吧。
[/Quote]

可能看了也是不理解!
需要的是真正的理解!
billow_zhang 2009-07-09
  • 打赏
  • 举报
回复

写一个初始化int类型参数的函数:

intmemset(int *imem, int cnt, int value)
{
int i;

for ( i = 0; i < cnt; i++ )
imem[i] = value;
}

现在可以这样使用了:

int a[100];

intmemset(a, sizeof(a) / sizeof(a[0]); 1);

seyjs 2009-07-09
  • 打赏
  • 举报
回复
呵呵,长见识了
tonforce 2009-07-09
  • 打赏
  • 举报
回复
5楼解释的很详细啊
受教了。
周药师 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luwenzuo 的回复:]


可以这样初始化:
int a[100]={0};

[/Quote]
这样方便多了
blh 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 projoy 的帖子:]
memset不能为int型数组初始化吗?如
int a[100];
memset(a,1,sizeof(a));
可是a却被赋值成168430090,168430090.。。。。。。。。。
这是怎么回事?
[/Quote]

memset是按照字节进行内存设置的,你这样对int设置得到的就是0x01010101
ToddSong 2009-07-09
  • 打赏
  • 举报
回复
不好意思,如果是memset(a,0,sizeof(a)); 的话可以 但是如果是memset(a,1,sizeof(a));就不行了
ToddSong 2009-07-09
  • 打赏
  • 举报
回复
memset()可以初始化int啊。我刚才在试了试确实可以啊
#include<stdio.h>
main()
{
int a[]={1,2,3,4,5};
int i=0;
for(i=0;i<5;i++)
printf("%d ",a[i]);

memset(a,0,sizeof(a));

for(i=0;i<5;i++)
printf("%d ",a[i]);
}
jackzhhuang 2009-07-09
  • 打赏
  • 举报
回复
楼主不会认为都是111111……111111吧??
amossavez 2009-07-09
  • 打赏
  • 举报
回复
memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, \0, sizeof(a));
过去的我 2009-07-09
  • 打赏
  • 举报
回复
出错在第三个参数,不能用sizeof对数组指针操作,直接100就完事了
Crazy_hand 2009-07-09
  • 打赏
  • 举报
回复
memcpy v好像是可以拷贝int 型数组的。
Walf_ghoul 2009-07-09
  • 打赏
  • 举报
回复
小猪都解释完了,5楼的对错误分析的很好。。。
beyonddream2008 2009-07-09
  • 打赏
  • 举报
回复
5楼正解
mengjfu 2009-07-09
  • 打赏
  • 举报
回复
memset不能用于int
taodm 2009-07-09
  • 打赏
  • 举报
回复
呃,多少人栽在过memset、memcpy上呀。没认真看过函数说明呀。
这是每个人的成长之路上必经吧。
加载更多回复(6)

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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