使用memset初始化数组

使用memset初始化数组写在前面的ATTENTION:用memset初始化非char型(eg.int型、float型…)数组时,假如初始化值非0,可能导致错误的结果。先举个通常用法的栗子,将int型数组arr的元素初始化为0:intarr[5];memset(arr,0,sizeof(int)*5);假如初始值不为0,会如何呢?例如设置为1:使用memset(arr,1,sizeof(int…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

写在前面的ATTENTION:用memset初始化非char型(eg. int型、float型…)数组时,假如初始化值非0,可能导致错误的结果。

先举个通常用法的栗子, 将int型数组arr的元素初始化为0:

int arr[5];
memset(arr, 0, sizeof(int) * 5);

假如初始值不为0,会如何呢?例如设置为1:
使用memset(arr, 1, sizeof(int) * 5),得到的arr元素值为:0x01010101, 0x01010101, 0x01010101, 0x01010101, 0x01010101,显然并非所期望的结果。
再来回头看看memset的基础知识吧:

memset
void * memset ( void * ptr, int value, size_t num );
Fill block of memory
Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).
Parameters
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.size_t is an unsigned integral type.
Return Value
ptr is returned.

注意到,memset填充内存时,是以byte为单位的,而上面例子中的int型数组每个元素就占了4bytes,故而填充后的值就是0x01010101了。
此外,memset的参数value,虽然是int型,但是会将其转换为unsigned char再进行填充,这样才能跟byte对应上。如果设置的value超过了unsigned char的表示范围,就溢出了,例如这样memset(arr, 256, sizeof(int) * 5),得到的结果反而与memset(arr, 0, sizeof(int) * 5)相同。
对于int型数组,假如初始化值为-1,也是可以用memset的,这种情况下得到的值是0xffffffff。但是对于其他类型例如float型数组,就不能这样做了。

BTW,如果使用int arr[5] = {1},只会将数组中的第一个元素初始化为1,其他元素则是默认值。int变量的默认值,假如是全局变量或静态局部变量则为0,假如是局部变量则为随机值(C语言规范中未作要求)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179428.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用 Java DB (Derby) 数据库

    使用 Java DB (Derby) 数据库使用JavaDB(Derby)数据库https://netbeans.org/kb/docs/ide/java-db_zh_CN.html本文档说明了如何在NetBeansIDE中设置与JavaDB数据库的连接。在建立连接之后,即可开始在IDE中使用该数据库,您可以执行的操作包括创建表、用数据填充表、运行SQL语句和查询等。…

  • spa 单页面_浅谈数学在生活中的应用论文

    spa 单页面_浅谈数学在生活中的应用论文https://blog.csdn.net/huangpb123/article/details/86183453单页Web应用(singlepagewebapplication,SPA):SPA是一种特殊的Web应用,是加载单个HTML页面并在用户与应用程序交互时动态更新该页面的。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML…

  • activation code2020激活码【在线破解激活】

    activation code2020激活码【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • HTML5标准简介

    最近前端的群都蛮热闹的,但我发现多数讨论的是javascript和css相关的问题,仿佛大家在努力创建各种交互、样式的时候,忘却了这一切的基础–HTML。其实我很喜欢HTML,觉得这个语言远比XM

    2021年12月20日
  • ssh学习路线[通俗易懂]

    ssh学习路线[通俗易懂]传送门:www.cdgeek.comjava分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言。建议如果学习java体系的话可以这样去学习:*第一阶段:Java基础,包括java语法,面向对象特征,常见API,集合框架;*第二阶段:java界面编程,包括AWT,事件机制,SWING,这个部分也可…

  • 关于python中的+、+=、*、*=[通俗易懂]

    关于python中的+、+=、*、*=[通俗易懂]关于python中的+、+=、*、*=

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号