memset 初始化数组

memset是初始化一段内存区域的函数,其头文件是<string.h>,以前经常使用出现错误,整理一下。

C++ Reference对于memset的定义为:

void * memset ( void * ptr, int value, size_t num );

其中,对于memset的各个参数的定义如下:

ptr: Pointer to the block of memory to fill.

value: Value to be set. The value is passed as an int, but the function fills the block of memory using the unsigned char conversion of this value.、

num:Number of bytes to be set to the value.

在参数的说明中,提到value值是按照int类型进行的传递,但是在填充的时候是将value值转换为unsigned char进行填充。因此,在使用memset进行内存初始化的时候,value值应该传递的是一个字节的值。

对int类型的内存区域进行初始化,ptr的类型是int*,举例说明一下:

1.   将内存初始化为0

memset(ptr,0,sizeof(ptr));

2.  将内存初始化为-1

memset(ptr,0xff,sizeof(ptr));

  因为按照字节进行填充,那么value值为0xff,将会把内存的每个字节都填充为0xff,则int值的区域为全1,那么int值就是-1。

3.  将内存初始化为极大值

memset(ptr,0x3f,sizeof(ptr));

  这段初始化代码初始出来的int值大小是1061109567

如果要将int内存区域统一初始化为1,那memset就无能为力了。

  

时间: 2024-10-30 09:11:55

memset 初始化数组的相关文章

memset初始化数组的坑

memset函数常被我们用来初始化数组,然而有个坑可能会被我们踩到. 静态数组初始化 一般情形是这样的: #include <cstring> int main() { // 静态数组arr int arr[10]; // 将数组所有元素初始化为0 memset(arr,0,sizeof(arr)); // 遍历输出数组元素 for(int i=0;i<10;++i){ cout << arr[i] << endl; } return 0; } 这样做是正确的,通

memset 初始化数组 &amp; 实现原理

初始化数组可不必使用n重for循环. 原理 memset具有初始化数组的功能,能够初始化数组中的每一个值. 它是将数组中的每一个数的二进制的每一个字节初始化的. 比如初始化int类型的a数组:memset(a,1,sizeof(a)); 得到的其实是0001 0001 0001 0001. 关于0x......不懂的:我的博客 代码 #include<cstring>如果是int数组: memset(g, 0, sizeof(g));                   //全部清为0: me

c++ 批量初始化数组 fill和fill_n函数的应用

转自c++ 如何批量初始化数组 fill和fill_n函数的应用 std::fill(a+2,a+10,0x3f3f3f3f);///从下标2到下标10 前闭后开 共8个 std::fill_n(a+2,10,0x3f3f3f3f);///从下标2 开始 填充10个 memset(a,0x7f7f7f7f,sizeof(a)); 一. fill和fill_n函数的应用: fill函数的作用是:将一个区间的元素都赋予val值. 函数参数:fill(first,last,val);//first为容

【转】c++ 如何批量初始化数组 fill和fill_n函数的应用

http://blog.csdn.net/sunquana/article/details/9153213 一. fill和fill_n函数的应用: fill函数的作用是:将一个区间的元素都赋予val值. 函数参数:fill(first,last,val);//first为容器的首迭代器,last为容器的尾迭代器, 替换元素的区间为[first,last),val为将要替换的值. eg:             vector <int> V;             fill(V.begin(

【转】c++中使用memset初始化类对象

https://blog.csdn.net/u010261063/article/details/70064090 1 #include <iostream> 2 #include <memory.h> 3 using namespace std; 4 5 class parent{ 6 public: 7 virtual void output(); 8 virtual void output2(); 9 }; 10 11 void parent::output(){ 12 co

C语言:实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置

#include<stdio.h> void init(int arr[],int len) {  int i=0;  printf("初始化数组->:\n");  for(i=0;i<len;i++)  {    scanf("%d",&arr[i]);   }  } void reverse(int arr[],int len) {  int i=0;  printf("逆置数组->:\n");  for

创建一个数组, 实现初始化数组、清空数组、完成数组元素的逆置。

#include <stdio.h> void init(int arr[],int len) { int i=0; int num=0; printf("初始化数组->:\n"); for(i=0;i<len;i++) { scanf("%d",&num); arr[i]=num; } } void empty(int arr[],int len) { int i=0; printf("清空数组->:\n"

c#清空数组&amp;初始化数组&amp;动态数组

清空数组>>>Array.Clear [去MSDN查看] 1 string[] str = new string[2]; 2 for (int i = 0; i < str.Length; i++) 3 str[i] = i.ToString(); 4 Array.Clear(str, 0, str.Length); 5 for (int i = 0; i < str.Length; i++) 6 Console.WriteLine(string.IsNullOrEmpty(

用enum枚举量做下标初始化数组

一下copy自:http://bbs.csdn.net/topics/90234659 ------------------------------------------------------------------------------------------------------------------- “两则C语言技巧”http://tb.blog.csdn.net/TrackBack.aspx?PostId=1120124第一个技巧在我的环境下不能通过,是我的原因吗.引用:1.