社区
C++ 语言
帖子详情
memset为int型数组初始化问题
projoy
2009-07-09 04:15:07
memset不能为int型数组初始化吗?如
int a[100];
memset(a,1,sizeof(a));
可是a却被赋值成168430090,168430090.。。。。。。。。。
这是怎么回事?
...全文
3274
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
初始化
int
数组
memset
()是一个来自于string库的函数,正规用法是
初始化
char类
型
的
数组
。因为char类
型
只占1个字节,
memset
按字节赋值后,会将char类
型
数组
的所有元素变为你指定的值。但是4字节的
int
类
型
在被
memset
赋值后,会被重复四次:如使用
memset
赋值1到
int
数组
后,1转为二进制的一个字节为00000001,赋值完成后为000000010000000100000001...
使用
memset
初始化
数组
写在前面的ATTENTION:用
memset
初始化
非char
型
(eg.
int
型
、float
型
…)
数组
时,假如
初始化
值非0,可能导致错误的结果。 先举个通常用法的栗子, 将
int
型
数组
arr的元素
初始化
为0:
int
arr[5];
memset
(arr, 0, sizeof(
int
) * 5); 假如初始值不为0,会如何呢?例如设置为1: 使用
memset
(arr, 1, sizeof(
int
...
使用
memset
初始化
int
型
数组
的坑
经验总结很重要
memset
函数为二维
数组
初始化
1
int
* a; a = new
int
[10];sizeof(a) 只会返回出来指针的大小,所以我们只能自己计算这个
数组
的长度,这里应当是sizeof(
int
) * 10, 因为
数组
里面有10个
int
所以应该,
memset
(a, 0, sizeof(
int
)*10);//将a
数组
初始化
为02
int
**p;//开一个n*m的
数组
p = new
int
*[n]; for (
int
i = ...
C/C++
int
数组
初始化
一、一维
数组
C/C++
初始化
静态
数组
int
array[100]; //定义了
数组
array,但并未对
数组
初始化
; 静态
数组
int
array[100] = {0}; //定义了
数组
array,并将
数组
元素全部
初始化
为0; 静态
数组
int
array[100] = {1}; //定义了
数组
array,并将
数组
第一个元素
初始化
为1,后面99个元素
初始化
为0; 静态
数组
int
arr...
C++ 语言
64,661
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章