memset()函数的使用详解

memset()是string.h头文件中的函数

作用是在一段内存块填充某个给定的,它是对较大的结构体数组进行清零操作的一种最快方法

注意:

1.memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)

比如:int a[5];

 memset(a,1,sizeof(a));

因为1的二进制码为00000000 00000000 00000000 00000001   只要其中的后八位(00000001)

所以数组中每个元素的四个字节都会被赋值为(00000001)
其结果就是 00000001 00000001 00000001 00000001  

所以数组中每个元素的值都会是    1*pow(2,24)+1*pow(2,16)+1*pow(2,8)+1*pow(2,0)=16843009;

2.第二:memset(void *s, int ch,size_t n);中ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节

比如:int a[5];

memset(a,-1,sizeof(a))与  memset(a,511,sizeof(a)) 所赋值的结果是一样的都为-1;

因为 -1的二进制码为(11111111 11111111 11111111 11111111)

      511的二进制码为(00000000 00000000 00000001 11111111)

后八位都为(11111111),所以数组中每个字节,如a[0]元素的四个字节都被赋值为(11111111)

其结果为a[0](11111111 11111111 11111111 11111111),即a[0]=-1

因此无论ch多大只有后八位二进制有效,而后八位二进制的范围在(0~255)中改。

而对字符数组操作时则取后八位赋值给字符数组,其八位值作为ASCII码。

#include<stdio.h>
#include<string.h>  
int main()
{ 
	int a[7];
	int i;
	memset(a,0,sizeof(a));
	for(i=0;i<7;i++)
	{
		printf("%d  ",a[i]);
	}
	printf("\n\n");
	memset(a,1,sizeof(a));
	for(i=0;i<7;i++)
	{
		printf("%d  ",a[i]);
	}
   return 0;	
} 
结果:

0  0  0  0  0  0  0  

16843009  16843009  16843009  16843009  16843009  16843009  16843009  
发布了183 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/SEVENY_/article/details/104566997