[转]C/C++中的memset

http://blog.csdn.net/songuooo/article/details/7819790

1. 需要的头文件

C中为<memory.h> 或 <string.h>

C++中为<cstring>

2. 函数原型

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

为地址ptr开始的num个字节赋值value,注意:是逐个字节赋值,ptr开始的num个字节中的每个字节都赋值为value。

(1) 若ptr指向char型地址,value可为任意字符值;

(2) 若ptr指向非char型,如int型地址,要想赋值正确,value的值只能是-1或0,因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

例,正确赋值:

[cpp]

int A[2];

memset(A, -1, sizeof A);

赋值过程如下图:

由于int型占四个字节,memset的赋值方式是逐个字节赋值,因此A[0]或A[1]实际上是四个字节合在一起的值,即0XFFFFFFFF=-1。

例,错误赋值:

[cpp]

int A[2];

memset(A, 1, sizeof A);

赋值过程如下图:

A[0]的值实际上是0X01010101=16843009,因此不是我们所期望的哦。

时间: 2024-08-03 13:11:09

[转]C/C++中的memset的相关文章

C++中的memset()函数 ------------转自:http://www.360doc.com/content/10/1006/18/1704901_58866679.shtml

memset()函数可以对大内存的分配进行很方便的操作(初始化),所谓"初始化",当然是指将你定义的变量或申请的空间赋予你所期望的值,例如语句int i=0;就表明定义了一个变量i,并初始化为0:如果int j=5;就表明定义了一个变量j,并初始化为5. 但是对于大块儿内存的分配,这种方法当然不行,例如int arr[100];定义了数组arr,包含100个元素,如果你写成int arr[100]=0;想将数组全部内容初始化为0,是不行的,连编译都不能通过.这种情况的初始化,有两种方法

c/c++中对于memset的个人理解

今天在写一道dfs题目,想到要给一个二维数组初始化合适的函数且学过的就memset了,这个函数很神奇memset函数是逐字节进行填充并且它是一个字符串函数,看到网上一个代码没看懂如下 #define MAX 100000 const int MAXN = 5; int len[MAXN][MAXN]; memset(len,MAX,sizeof(len))://失败,并不能让len数组所有的值是100000,而是-1600085856 memset(len,-1,sizeof(len))//成功

【转】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

构造函数 memset

构造函数中使用memset会剖坏虚表指针 1.通过对象调用时,编译器直接生成调用的地址: 2.通过指针或者引用调用时,在运行期通过虚表指针查询调用的地址: #include <iostream> using namespace std; class A { public: A() { memset(this,0,sizeof(*this)); } virtual void fun() { cout << "fun" << endl; } }; cla

fill,fill-n,memset的区别

这里在网上找到了一个归纳的非常好的总结 fill函数,fill与memset函数的区别 memset函数 按照字节填充某字符 在头文件<string.h>中 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能.因为只有00000000 = 0,-1同理,如果我们把每一位都填充"1",会导致变成填充入"11111111" 例如       int

c语言memset源码

c语言memset源码 一.用法 void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作.不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeof(int));这样得到的arr数组一定不是全0,而是16843009,下面解释原因.首先,变量类型的本质只是标志

[转载]memset()的效率

http://blog.csdn.net/hackbuteer1/article/details/7343189 void *memset(void *s, int ch, size_t n); 作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作. 不知道有没有像我一样把memset当作万能的初始化工具,例如: int arr[n]; memset(arr,1,n*sizeof(int)); 这样得到

C++之数组处理相关函数(memcpy/memset等)

头文件:string.h void *memcpy(void *dest, const void *src, size_t n); 功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 void *memset(void *s, int ch, size_t n); 功能:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s . memset:作用是在一段内存块中填充某个给定的值,它是对较大

POJ 2769 Reduced ID Numbers 同余定理

Reduced ID Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8989 Accepted: 3610 Description T. Chur teaches various groups of students at university U. Every U-student has a unique Student Identification Number (SIN). A SIN s is an