C++ memset用法

memset函数存在于C/C++的头文件<cstring>中,其作用(一般)是用来将数组初始化。(尤其是当一个数组已经用过了(划掉))

格式:

  memset(void *s,int ch,size_t n);

函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或者数组进行清零操作的一种最快方法。
                                             ——来自百度百科
相信这一段话谁都看得懂。为了方便理解给出实例:
1 #include <cstdio>
2 #include <cstring>
3
4 int main() {
5     int a[10];
6     memset(a,0,sizeof(a));
7     for (int i=1;i<=9;i++) printf("%d",a[i]);
8     return 0;
9 }

运行程序,你会看到一行可爱的0排好队站在你面前。

然而当我在刷(水)题的时候,为了懒得写for循环我直接使用memset来把一个数组全部初始化为1 ,就像这样:

memset(enode,1,sizeof(enode));

那一天使我回想起被WA支配的恐惧,直到我在调试的时候发现enode在memset操作以后长这样:

为什么呢?

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

至于memset对于涉及指针的内存管理,那就不是我们地球人搞得懂的范畴了——甚至指针本身就不是给人用的。

来跟我一起念:不摸指针RP++!!

时间: 2024-08-18 21:16:44

C++ memset用法的相关文章

memset用法详解(转)

问题描述: int * cow = new int[n+1]; memset(cow,0,(n+1)*4); 将N+1个元素置成0,为什么不行 memset是对一个字节的int4个字节,因此*4 但是只能为0,其他例如1就不可以,详见最后一个例子 memest原型 (please type "man memset" in your shell) void *memset(void *s,  int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大

memset用法总结

memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针. 1.char类型,可以初始化为任何值: 2.int类型,只能初始化为0和-1: 3.bool类型,可以初始化为1: 4.全局变量的数组,建立完值默认为0,不需要用memset: 试验代码 #include<stdio.h>#include<strin

memset()用法小结

 memset()的用途: 1.用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为'memset(a,'\0',sizeof(a)); ps:memset()是对其指向的内存按字节进行赋值的,如果对int型内存进行赋值 memset(array,1,5*sizeof(int)); 结果就是1684300916843009168430091684300916843009 因为memset 对array指向的5个4字节的int进行赋值为1,合在一起就是00000001000

转:memset用法详解

功 能 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针. [编辑本段] 用 法 void *memset(void *s, int ch, unsigned n); [编辑本段] 程序例 #include <string.h> #include <stdio.h> #include <memory.h> memset函数 int main(void)

memset()函数

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组, c:是赋给buffer的值, count:是buffer的长度. 这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer)) Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为' '或'/0': 例:char a[100];

C语言-memset()

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组, c:是赋给buffer的值, count:是buffer的长度. 这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer)) Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’: 例:char a[100];

C++ Learning——Build a simple&amp;little RB_Tree

Why would we go to such ludicrous lebgths to explain the RB_TREE? <STL源码剖析>上给了我们一个很好的解释:(见202页) 所谓树形平衡与否,并没有一个绝对的测量标准."平衡"的大致意义是:没有一个节点过深(深度即就是"根节点至任一节点的路径长度,即所谓该节点的深度",在数值上与路径长度相等).不同的平衡条件,造就出不同的效率表现,以及不同的实现复杂度.有数种特殊结构如:AVL-Tree

【学习ios之路:C语言】存储区内存划分

一. 内存存储区的划分: 1.栈区:栈区主要存放函数内部定义的变量,数组.函数调用时,开辟空间,函数执行完毕,回收空间,空间的开辟与回收有系统管理. 2.堆区:堆区最大的特点:空间的开辟与释放有开发人员手动管理. 3.全局区静态区:主要存放函数外部定义的全局变量以及静态变量,空间一旦开辟,就不会回收.直到应用程序执行结束. 4.常量区:存储常量.1.整形常量.2.浮点型常量.3,字符串常量.4.字符串常量. 5.代码区:存放程序编译之后生成的cpu指令. 二.malloc,在堆区开辟空间. //

sizeof, strlen区别

strlen与sizeof的区别 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. 2.sizeof是算符,strlen是函数. 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的. 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了. 5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是siz