关于memset函数

如果我定义一个二维数组inta[100][100]想把他的元素全部置成500而memset好像只能memset(a,-1,sizeof(int)*100*100)或mem... 如果我定义一个二维数组int a[100][100] 想把他的元素全部置成 500
而memset好像只能memset(a,-1,sizeof(int)*100*100) 或
memset(a,0,sizeof(int)*100*100) 将0 -1改成其他的数就会出错
请我桌面解决 或者怎么把a[100][100]全部置为400
不能用 for(i=0;i<100;i++){
for(j=0;j<100;j++) a[i][j]=400;
}
这样的方法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a[100][100];
void main(){
memset(a, 400, sizeof(int)*100*100);
printf("%d\n",a[52][52]);
}
打印不出400 而是个乱七八糟的数
展开
 我来答
xniren
2008-08-17 · TA获得超过1154个赞
知道小有建树答主
回答量:554
采纳率:100%
帮助的人:520万
展开全部
楼主希望通过库函数memset()来对一个数组进行初始化,需要了解一下该函数的工作原理。库函数memset()是针对字节操作的,其中第二个参数值被赋给第一个参数指向的内存地址开始的每一个字节,因此,这种初始化其实存在局限性,也导致其主要用于清除数组内容等。比如:假设i=0,1,2,...
memset(a,0,sizeof(a)); // 此时a[i]=0x00000000
memset(a,-1,sizeof(a)); // 此时a[i]=0xffffffff
memset(a,0x0f,sizeof(a)); // 此时a[i]=0x0f0f0f0f=252645135
由于500=0x1f4,400=0x190,因此,如果使用
memset(a,0x190,sizeof(a)); // 此时a[i]=0x90909090
所以,初始化过程还是建议使用循环语句来做。
shihoumacili
高粉答主

2015-12-27 · 每个回答都超有意思的
知道大有可为答主
回答量:1.1万
采纳率:87%
帮助的人:492万
展开全部
  memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
  函数介绍:
  void *memset(void *s, int ch, size_t n);
  函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
  memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Starfire9
2008-08-17 · TA获得超过282个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:0
展开全部
对于一个二维数组要用memset的话你应该用一个循环吧:
for (i = 0; i < 100; i++)
memset(a[i], 400, sizeof(int)*100); // 想要400的话第二个参数传个400不就行了~
记住:二维数组是特殊的数组,它们的元素是数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简单又奔放灬福音8
2008-08-17 · TA获得超过538个赞
知道答主
回答量:572
采纳率:0%
帮助的人:0
展开全部
我怎么觉得不可以?
memset并不能知道一个单元是多大,每个单元是什么类型,从参数上就能知道。

memset是做不到的。上面的答案全是错的。不信去试。

理由:
c中没有反射,而你也不能告诉memset每个数据单元是多大或是什么类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
i_you_love
2008-08-17 · TA获得超过252个赞
知道答主
回答量:177
采纳率:0%
帮助的人:0
展开全部
#include <iostream>
//#include <memory.h>
#include <string>

using namespace std;
int main()
{

char B[10];
memset(B,'2',sizeof(B));
for(int i = 0 ; i < 10 ; i++)
cout <<B[i]<< endl;

system("pause");
return 0;

}
/*#include <iostream>
using namespace std;
int main()
{
int a[10][10],i=0,j=0;
memset(a,100,sizeof(a));
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
cout<<a[i][j]/16843009<<" ";
}
system("pause");
return 0;
} */
看看吧,这是我写的两个程序,第二个注释了,我想是办不到的,但是字符可以赋其他的值,我本来以为字符串也行,可试了一下不行,抱歉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式