使用memset()要注意

摘要:
Value是要写入的值,num是从ptr指向的第一个地址写入的字节总数。注意num传入的参数的错误示例:等于sizeof(int)。也就是说,这里的num参数只是指针的大小。此外,当memset()用于为整个数组分配无限值(或无限小时)时,您应该注意memset(()初始值的值范围,因为此函数只能使用ch的最后八位来为输入范围的每个字节分配值。"

原型如下:

使用memset()要注意第1张

ptr是要写入的内存块的指针,value是要写入的值,num是从ptr指向的首地址开始一共要写入的字节数。

要注意num传入的参数

错误示范:

使用memset()要注意第2张

 使用memset()要注意第3张

 实际上sizeof(InDegree)是4,等于sizeof(int)。也就是说这里的num参数只是一个指针的大小,没有完成初始化工作,除了第一个数组元素外,剩下的都是随机值。

应该改成:

使用memset()要注意第4张

 另外当使用memset()为整个数组赋值无穷大(或无穷小时),要注意memset()初值的取值范围,虽然原型中是int,但实际上是unsigned char:

使用memset()要注意第5张

 参考这两篇文章:

https://www.jianshu.com/p/b25acc1d2a9f

https://www.cnblogs.com/LLGemini/p/4309660.html

“实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节”

赋值最大值:

“但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数而得自己写循环了(写这些不重要的代码真的很痛苦),我们知道这是因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。”

免责声明:文章转载自《使用memset()要注意》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇介绍 JSONISP与DSP的区别【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 之采用execSQL和rawQuery方法完成数据的添删改查操作

使用 SQLiteDatabase 操作 SQLite 数据库 [java] view plaincopy /*  Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称...

mysql批量更新

一般的update user set num = new_num where id = ('需更新的记录') ,这种一条条更新多条数据时会很慢,而采用下面的sql语句可以快速实现一条语句多条更新; UPDATE user SET name = CASE id WHEN 1 THEN new_num WHEN 2 THEN old_num + 10 WHEN...

使用 suspend 和 resume 暂停和恢复线程

suspend 和 resume 的使用 在 Thread 类中有这样两个方法:suspend 和 resume,这两个方法是成对出现的。 suspend() 方法的作用是将一个线程挂起(暂停), resume() 方法的作用则是将一个挂起的线程重新开始并继续向下运行。 通过一个例子来看一下这两个方法的使用: public class SuspendT...

二、Metrics指标类型

Prometheus 的客户端库中提供了四种核心的指标类型。但这些类型只是在客户端库(客户端可以根据不同的数据类型调用不同的 API 接口)和在线协议中,实际在 Prometheus server 中并不对指标类型进行区分,而是简单地把这些指标统一视为无类型的时间序列 2.1、Counter (计数器) ​ Counter 类型代表一种样本数据单调递增的指...

java 除法运算只保留整数位的4种方式

  1.情景展示   根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推... 2.情况分析   可以使用3个函数实现   Math.floor(num)   只保留整数位   Math.rint(num)     余数四舍五入   Math.ceil(num)     取整位,再+1   举例: double n...

cjson库的使用以及源码阅读

cjson是一个用c语言开发的json解析库,免费开源只有一个c文件和一个h文件。json和xml功能相似,可以用来传输数据,存储数据以及表达程序当前的状态。 1、下载cjson的源码         https://github.com/DaveGamble/cJSON 2、阅读readme文件可以大概的了解一下cjson的介绍以及使用方法,我尝试着把...