关于memset函数

如果我定义一个二维数组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 而是个乱七八糟的数

楼主希望通过库函数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
所以,初始化过程还是建议使用循环语句来做。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-27
  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:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 。
第2个回答  2008-08-17
对于一个二维数组要用memset的话你应该用一个循环吧:
for (i = 0; i < 100; i++)
memset(a[i], 400, sizeof(int)*100); // 想要400的话第二个参数传个400不就行了~
记住:二维数组是特殊的数组,它们的元素是数组。
第3个回答  2008-08-17
我怎么觉得不可以?
memset并不能知道一个单元是多大,每个单元是什么类型,从参数上就能知道。

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

理由:
c中没有反射,而你也不能告诉memset每个数据单元是多大或是什么类型。
第4个回答  2008-08-17
#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;
} */
看看吧,这是我写的两个程序,第二个注释了,我想是办不到的,但是字符可以赋其他的值,我本来以为字符串也行,可试了一下不行,抱歉
相似回答