【C++】memset函数

这篇具有很好参考价值的文章主要介绍了【C++】memset函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

memset

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
简单来说,就是将某一块内存的全部内容设置为指定的值

#include<cstring>
void *memset(void *s, int ch, size_t n);
  • s:可以是指针或者数组,指向要填充的内存块赋值从地址s开始
  • ch:初始化所赋的值
  • n:字节长度
  • 返回对象是一个指向存储区s的指针
    从地址s开始,字节长度为n的内存全部赋值为ch(注意是每一个字节都赋值为ch)

对char类型的数组初始化

int main(){
    char array[4];
    memset(array,'1',4);
    for(int i=0; i<4; i++){
        cout<<array[i]<<" ";
    }
    return 0;
}

输出结果:
c++ memset,C/C++,c++,算法,数据结构

对int类型的数组初始化

int main(){
    int array[4];
    memset(array,1,4);
    for(int i=0; i<4; i++){
        cout<<array[i]<<" ";
    }
    return 0;
}

输出结果:
c++ memset,C/C++,c++,算法,数据结构
上述代码有两个问题:

  1. 数组array是整形,而一般int所占内存空间为4个字节。由于memset函数是以字节为单位进行赋值的,所以上述代码是为数组a的前4个字节进行赋值。正确的memset语句应该为:
memset(array,1,16); //int所占内存为4字节的情况
memset(array,1,sizeof(array));

因此,我们将代码改为:

int main(){
    int array[4];
    memset(array,1,sizeof(array));
    for(int i=0; i<4; i++){
        cout<<array[i]<<" ";
    }
    return 0;
}

这次的输出结果:
c++ memset,C/C++,c++,算法,数据结构

  1. memset函数中只能取c的后八位赋给每个字节。
    第一个程序中,数组a是字符型的,字符型占据的内存大小就是1Byte,而memset函数也是以字节为单位进行赋值的,所以输出正确。
    第二个程序中,数组a是整型的,整型占据的内存大小为4Byte,而memset函数还是按照字节为单位进行赋值,将1(00000001)赋给每一个字节。那么对于a[0]来说,其值为(00000001 00000001 00000001 00000001),即十进制的16843009。

因此,用memset对非字符型数组的赋值一般都是错误的(0和-1除外)文章来源地址https://www.toymoban.com/news/detail-572588.html

到了这里,关于【C++】memset函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链表综合算法设计(c++数据结构)

      一、设计内容 已知简单的人事信息系统中职工记录包含职工编号(no)、职工姓名(name)、部门名称(depname)、职称(title)和工资数(salary)等信息(可以增加其他信息),设计并完成一个简单的人事信息管理系统,要求完成但不限于以下功能: (1)    增加一个职工信息

    2024年02月02日
    浏览(58)
  • C++数据结构与算法——双指针法

    C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注! 给你一个数组 nums 和一个值 val,你需要 原地

    2024年02月20日
    浏览(39)
  • C++中的算法与数据结构优化技巧

    在C++编程中,算法和数据结构的优化是提高程序性能和效率的关键因素之一。下面是一些常见的算法和数据结构优化技巧,希望对您有帮助: 选择合适的数据结构:数据结构的选择对算法效率有重要影响。根据具体问题的需求,选择合适的数据结构,如数组、链表、树、散列

    2024年01月17日
    浏览(43)
  • 【C++图解专栏】手撕数据结构与算法,探寻算法的魅力

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏简介:在这个专栏,我将带着大家一起用 C++ 手撕基础的数据结构与算法,每一讲都有详细的讲解,29 篇文章共

    2024年02月09日
    浏览(59)
  • C++算法之旅、05 基础篇 | 第二章 数据结构

    常用代码模板2——数据结构 - AcWing 使用结构体指针,new Node() 非常慢,创建10万个节点就超时了,做笔试题不会用这种方式(优化是提前初始化好数组,但这样跟数组模拟没区别了,而且代码量很长) 使用两个数组,e存储val,ne存储next。空节点next用-1表示 826. 单链表 - AcWi

    2024年02月10日
    浏览(58)
  • 《数据结构、算法与应用C++语言描述》-列车车厢重排问题

    完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_10Train_carriages_rearrangement/ 一列货运列车有 n 节车厢,每节车厢要停靠在不同的车站。假设 n个车站从 1 到n 编号,而且货运列车按照从n到1的顺序经过车站。车厢的编号与它们要停靠的车站编号相同。为了便于从

    2024年04月10日
    浏览(67)
  • C++数据结构——习题6-5 最小生成树(Prim算法)

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。已知村庄数N和可建道路数M,设初始状态下任意村庄之间没有路,请编写程序,根据输入的两村庄间修建道路的费用情况,计算这些村庄

    2024年02月09日
    浏览(81)
  • 【C++】memset函数

    memset是计算机中C/C++语言 初始化函数 。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。 简单来说,就是将某一块内存的 全部内容设置为指定的值 。 s:可以是指针或者数组,指向要填充的内存块赋值从地址s开始 ch:初始化

    2024年02月16日
    浏览(36)
  • 【数据结构与算法系列5】螺旋矩阵II (C++ & Python)

    给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 1 = n = 20 使用和二分法一样的思想,确定循环不变量,确定是左闭右开,还是左闭右闭合,本次使用的是左闭右开 C++ 实现: python 实现:

    2024年02月09日
    浏览(42)
  • [算法与数据结构]:LRU Cache 的原理与C++实现

    ​ LRU全称是Least Recently Used,即 最近最久未使用,是一种简单的缓存策略。顾名思义,LRU 算法会选出最近最少使用的数据进行淘汰。 ​ 那么什么是缓存(Cache)呢?缓存是一种提高数据读取性能的技术,可以有效解决存储器性能和容量的矛盾,是一种空间换时间的设计思想,比

    2024年01月20日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包