memset函数对数组进行初始化最大值及其误区【c语言】
·
误区:
memset函数为初始化函数,可以将一段连续的内存初始化为某个值
memset(数组名,赋的初值,sizeof(数组名));
平时看某个函数的时候,只看一半不看一半的,以为这个函数可以初始化任意值,导致wa声一片

其实,这个方法赋初值只能赋0和-1
#include<bits/stdc++.h>
using namespace std;
int a[10], b[10], c[10], d[10];
double e[10];
int main(){
memset(a,-1,sizeof(a));
memset(b,0,sizeof(b));
memset(c,1,sizeof(c));
memset(d,127,sizeof(d));
memset(e,127,sizeof e);
for(int j = 0; j<10; ++j) cout<<a[j]<<" ";
printf("\n");
for(int j = 0; j<10; ++j) cout<<b[j]<<" ";
printf("\n");
for(int j = 0; j<10; ++j) cout<<c[j]<<" ";
printf("\n");
for(int j = 0; j<10; ++j) cout<<d[j]<<" ";
printf("\n");
for(int j = 0; j<10; ++j) cout<<e[j]<<" ";
return 0;
}
运行结果:

原因:
memset存的值,和初始化值的补码有关,1的补码表示为0000 0001,对应的十进制则是 16843009
正确初始化最大值的方法:
建议:
如果要初始化最大值,建议记住 127
memset(arr,127,sizeof(arr)); //它将arr中的值全部赋为2139062143,这是用memset对int赋值所能达到的最大值;此外,对于double类型数组,127同样适用。
参考:
更多推荐


所有评论(0)