一、memset的介绍

memset是c语言的string.h里的字符串初始化函数,但是也经常用于普通数组的初始化,它的优点就是简单易用,一行代码就可以初始化数据了,当然这完全可以用for循环赋值代替的。

二、memset的基本用法

函数模板:
memset(数组首地址,初始值,初始化大小)

数组首地址:数组的首地址是可以直接用数组名代替的

初始值: 初始值的范围是0到127,因为memset是以字节为单位对数组进行赋值的,一个字节8位,所表达的值就是0到127

初始化大小: 初始化大小用一个整数表示,表示需要初始化多少字节,通常用sizeof(数组首地址)来获得需要初始化的大小

看着有点难懂没关系,看完示例代码就清晰了

1、char数组的初始化

memset本来就是为char数组初始化准备的

示例代码:

#include<iostream>
#include<cstring>//c语言的头文件是string.h,c++的头文件是cstring
using namespace std;//命名空间
int main(){char arr[10]; memset(arr,'a',10);//从数组首地址开始,初始化10个字节的值为'a';cout<<"memset(arr,'a',10)后,数组的值为:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}cout<<endl;cout<<endl;memset(arr+2,'b',4);//从数组首地址+2开始,即arr[2]的地址开始,初始化4个字节的值为'b';cout<<"memset(arr+2,'b',4)后,数组的值为:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}cout<<endl;cout<<endl;cout<<"sizeof arr的值为"<<(sizeof arr)<<endl;//sizeof可以获取到数组的大小,这个代码中sizeof arr的值就是10  memset(arr,'c',sizeof arr);//从数组首地址开始,初始化数组大小个字节的值为'c'cout<<"memset(arr,'c',sizeof arr)后,数组的值为:"<<endl; for(int i=0;i<10;i++){//打印 cout<<arr[i]<<' ';}}

运行结果:

memset(arr,'a',10)后,数组的值为:
a a a a a a a a a amemset(arr+2,'b',4)后,数组的值为:
a a b b b b a a a asizeof arr的值为10
memset(arr,'c',sizeof arr)后,数组的值为:
c c c c c c c c c c

2、普通数组的初始化

普通数组的初始化用法有点局限,因为int型的大小是32位的、long long型的大小是64位的,而memset只能以8位为单位初始化数组。

普通数组我们只需要学习两个初始值就可以了,一个是0,一个是0x3f

0: 0是最简单的了,就是把全部字节都置零,那么无论是int还是long long都可以全部初始化为0了

0x3f: 0x指的是十六进制的意思,说明 3f 是一个十六进制数,十六进制0-9是不变的,用a、b、c、d、e、f来代表10、11、12、13、14、15,那么3f对应的二进制就是0011 1111的意思,我们一般需要用最大值的时候是不会取真正的最大值的,因为最大值进行相加运算的时候就会越界了,这是有风险的,我们应该取最大值的一半或者更小一点,即经常使用的 0x3f3f3f3f ,而0x3f就可以把每 8 位都初始化为这个值,如果是 int 型的,那么就会被初始化为 0x3f3f3f3f ,如果是long long型,那么就会被初始化为 0x3f3f3f3f3f3f3f3f

总的来说,我们需要初始化为 0 的时候就用 0,需要初始化为最大值的时候就用0x3f

示例代码:

#include<iostream>
#include<cstring>//c语言的头文件是string.h,c++的头文件是cstring
using namespace std;//命名空间
int main(){cout<<"int型数组"<<endl; int arr1[10];//定义一个int型数组 memset(arr1,0,sizeof arr1);//初始化数组为0cout<<"memset(arr1,0,sizeof arr1)后,数组的值为" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr1[i]<<' ';} cout<<endl;memset(arr1,0x3f,sizeof arr1);//初始化数组为int型最大值的一半 cout<<"memset(arr1,0x3f,sizeof arr1)后,数组的值为" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr1[i]<<' ';} cout<<endl;cout<<endl;cout<<"long long型数组"<<endl; long long arr2[10];//定义一个long long型数组 memset(arr2,0,sizeof arr2);//初始化数组为0cout<<"memset(arr2,0,sizeof arr2)后,数组的值为" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr2[i]<<' ';} cout<<endl;memset(arr2,0x3f,sizeof arr2);//初始化数组为int型最大值的一半 cout<<"memset(arr2,0x3f,sizeof arr2)后,数组的值为" <<endl;for(int i=0;i<10;i++){//打印 cout<<arr2[i]<<' ';} }

运行结果:

int型数组
memset(arr1,0,sizeof arr1)后,数组的值为
0 0 0 0 0 0 0 0 0 0
memset(arr1,0x3f,sizeof arr1)后,数组的值为
1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567 1061109567long long型数组
memset(arr2,0,sizeof arr2)后,数组的值为
0 0 0 0 0 0 0 0 0 0
memset(arr2,0x3f,sizeof arr2)后,数组的值为
4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399 4557430888798830399

点个赞吧!

c++入门必学库函数 memset相关推荐

  1. ue4导入倾斜摄影_倾斜摄影入门必学|Context Capture建模软件工作流程

    对于一个典型的 倾斜摄影入门必学|Context Capture建模软件工作流程​www.swqy3d.com 来讲,分为了如下几步:1 新建项目后导入照片.POS.点云等数据.①导入照片 ②当你新建 ...

  2. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  3. 【笔记-java】java工程师-入门必学

    路径 目录 子目录 重点 课程名 备注 java工程师 入门必学 语法基础 环境搭建.开发工具使用.基础语法 java入门第一季 面向对象 继承.封装.多态 java入门第二季 常用工具类 异常.字符 ...

  4. 深度学习入门必学(第三篇:循环神经网络01)

    深度学习入门必学(第三篇:循环神经网络01) 一,第三篇:循环神经网络01 来自 一,第三篇:循环神经网络01

  5. zbrush常用笔刷_【建模】新手入门必学,ZBrush中常用笔刷简介!

    原标题:[建模]新手入门必学,ZBrush中常用笔刷简介! 单击左托盘的笔刷图标,弹出一个笔刷库,其中有许多常用笔刷,这也是许多初学者所头疼的问题,zbrush的笔刷非常多,而且功能很强大,好多朋友不 ...

  6. 数控机床坐标的介绍,通俗易懂,新手入门必学!

    数控机床坐标的介绍,通俗易懂,新手入门必学! 1.机床坐标系的定义 在数控机床上加工零件,机床的动作是由数控系统发出的指令来控制的.为了确定机床的运动方向和移动距离,就要在机床上建立一个坐标系,这个坐 ...

  7. 入门必学 | R语言数值型、字符型及因子型数据之间的差异与转换

    字符型.数值型及因子型数据之间的转换 数据类型的基本知识 不同数据类型之间的差异 数值型与字符型或因子型绘图时的差异 数值型与因子型和字符型的模型构建时的差异 三种数据类型之间进行转换    常用的三 ...

  8. 外汇入门必学基础知识——基本面分析

    外汇入门必学基础知识--基本面分析 基本面分析是指对影响一国经济以及货币汇率变化的核心要素进行研究,它旨在通过分析一系列经济指标.政府政策及事件,来预测某一经济周期中的汇率变化和市场趋势.基本面数据不 ...

  9. c++入门必学算法 质数筛

    文章目录 一.什么是质数筛 二.暴力枚举 1.暴力枚举基本思想: 2.模板代码 3.运行结果 三.埃氏筛 1.埃氏筛基本思想: 2.模板代码 3.运行结果 四.欧拉筛 1.对比埃氏筛 2.欧拉筛的基本 ...

最新文章

  1. 详解 Date 对象
  2. Android Tab大总结 Fragment+TabPageIndicator+ViewPager
  3. 【Python基础】Python之collections库-Counter
  4. python opencv轮廓提取_Python + Opencv2 实现轮廓提取,轮廓区域面积计算
  5. golang语言编译的二进制可执行文件为什么比 C 语言大(转载)
  6. express.static 和 lit-html
  7. python---重点(设计模式)
  8. python的作用域分别有几种_python中作用域与函数嵌套
  9. 简练软考知识点整理-建设项目团队
  10. lane是什么意思_什么是Trunk?Trunk详解
  11. C#获取网页内容的三种方式
  12. php插件改名,自制functions.php文件or插件,防止升级或更换主题时被替换
  13. atitit 完整的知识体系表 学科体系表 v2
  14. fast无线路由器设置服务器,迅捷(Fast)FW150R无线路由器设置
  15. 阿里云和域名怎么备案?
  16. 怎样有效提高记忆力?
  17. 梯度消失、爆炸产生的原因以及解决方法
  18. php时间相减_PHP 日期加减计算方法示例
  19. 都在用DevOps,linux基础命令要是还没掌握就out了
  20. 遍历Java中的列表

热门文章

  1. JavaScript的onunload()方法在关闭页面时不执行
  2. Logback+ELK+SpringBoot搭建日志收集服务器
  3. 【思路】扫雷MINE
  4. 最短路——【模板】单源最短路径(弱化版)(dijkstra)
  5. 乐视pro3应用鸿蒙OS,完美兼容、无广告,初体验华为鸿蒙系统,鸿蒙OS明显优于iOS?...
  6. QQ、微信、钉钉会非法获取您的信息吗
  7. linux开机自动挂载硬盘命令,Linux系统开机自动挂载硬盘分区
  8. mysql cte 表不存在_MySQL8.0新特性CTE(Common Table Expression)
  9. realsense相机内参如何获得+python pipeline+如何通过python script获取realsense相机内参(windows下可用)
  10. c语言mktime函数遇到的一些坑