误区:

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同样适用。

参考:

         使用memset对数组进行初始化 - ericling - 博客园 (cnblogs.com)

         memset_百度百科 (baidu.com)

         memset初始化详解+变量初始化最大值、最小值 

更多推荐