现在的位置: 首页 > 综合 > 正文

C++深度学习—资源问题,memset

2017年10月25日 ⁄ 综合 ⁄ 共 850字 ⁄ 字号 评论关闭

1、http://mindhacks.cn/2012/08/27/modern-cpp-practices/

看到有关于ScopeGuard的描述,真心大神啊!一定要好好琢磨一下。

2、memset()方法,void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

注意这里是 首n个字节的值,所以sizeof取总长度 

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

注意事项:
1、如果字符数组初始化或置某一值时,用法:
char a[5];
memset(a,0,5);
2、对于字符串数组来说,是不可以修改字符串的内容,如
char *a=“adgfa”;
memset(a,0,strlen(a)-1);//此时会产生访问冲突,因为:a是字符串常量,存储在内存中的静态存储区域(属于不可写空间)
3、如对int类型数组进行置零操作(注意:仅限于置零操作,不能进行置其他值的操作),需要这么用,如
int a[5];
memset(a,0,sizeof(a));
4、memset可以对结构体变量或结构体数组进行初始化处理,如:
struct

sample_struct
{
   
char

csName[16];
   
int

iSeq;
   
int

iType;
};
对于变量
struct

sample_strcut stTest;
1)、一般情况下,清空stTest的方法:
stTest.csName[0]={'\0'};
stTest.iSeq=0;
stTest.iType=0;
2)、用memset就非常方便:
memset(&stTest,0,sizeof(struct

sample_struct));
3)如果是数组,方法如下:
struct

sample_struct TEST[10];
memset(TEST,0,sizeof(struct

sample_struct)*10);
注意:如果结构体中有数组的话还是需要对数组单独进行初始化处理的。

抱歉!评论已关闭.