社区
C++ 语言
帖子详情
memset为int型数组初始化问题
projoy
2009-07-09 04:15:07
memset不能为int型数组初始化吗?如
int a[100];
memset(a,1,sizeof(a));
可是a却被赋值成168430090,168430090.。。。。。。。。。
这是怎么回事?
...全文
3558
26
打赏
收藏
memset为int型数组初始化问题
memset不能为int型数组初始化吗?如 int a[100]; memset(a,1,sizeof(a)); 可是a却被赋值成168430090,168430090.。。。。。。。。。 这是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
memset
memset
是针对字符类
型
数组
进行
初始化
的,也就是说每次
初始化
一个字节。所以如果使用它
初始化
int
型
数组
的话,
初始化
值是0的话没什么
问题
;但是
初始化
值为1时就会出现
问题
。
算法--最少硬币
问题
最少硬币
问题
即为多重背包
问题
#include <bits/stdc++.h> #define INF 9999 using namespace std; struct Coins {
int
t;
int
c; } coin[20];
int
min(
int
a,
int
b) { return a<b?a:b; }
int
main() { ...
正确使用
memset
今天做了一道素数打表的题我在使用一个
数组
记录是否为素数的时候使用了
memset
,将
数组
里面的数都清为1,代表是素数,不是素数,就改成0,我在判断这一个数是否为素数是依据也是是0还是1,结果一直存在
问题
,经过我一步步的调试竟然发现了一个之前从未在意过的bug,
memset
只能将
int
型
数组
清理成0或-1!!! 我们来验证一下: #include <stdio.h> #...
关于
memset
函数
memset
memcpy 都是 string 字符串处理函数,不是为
int
型
做的。 0 又 等于 NULL 所以
memset
0 没
问题
。 但是 其它数字会看作是 字符,不会对应相应的 整形数字。 系统把那字符 计算成整形结果后去储存,所以得到 奇怪的数字。
memset
函数的使用陷阱
memset
函数的使用来看
memset
函数的定义void *
memset
( void *dest,
int
c, size_t count ); dest是操作的起始地址,c是需设置的值,count 是需设置的字符数。从定义我们就可以看出这个函数的功能是设置一段内存为指定的值。今天在使用时我想使用这个函数把我的
int
数组
没个元素设置为2^31-1,即
int
型
所能表达的最大数字。但
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章