[原创]使用memset初始化数组为-1或…

为什么memset只能赋值为0或-1 问题引出 当我们运行下面的一段代码试图将数组中的数字全置为1: #include<bits/stdc++.h> using namespace std; int main() { int arr[5],b; memset(arr,1,sizeof(arr)); for(auto i:arr) cout<<i<<" "; } 会发现结果为:16843009 16843009 16843009 16843009 16843009 为什么结果会与我们预期不符? 原 阅读详情
相信很多人使用过memset来初始化数组为-1或0。
这时候数组元素正好是-1或0。
今天看了 memset的效率问题后,才想起这是个恰巧。
之前一直以为memset是对每个元素赋值,而实际不是的。

百度百科中的memset:
void *memset(void *s, int ch,  size_t  n);
将s所指向的某一块内存中的前n个  字节 的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。

对于下面一小段代码:
int temp[100];
memset(temp, -1, sizeof(temp));
之所以使用 memset(temp, -1, sizeof(temp))会使temp中每个元素的值为-1的原因如下:
int类型的整数-1在32位的计算机中表示为 11111111    11111111    11111111    11111111
memset将 void *memset(void *s, int ch,  size_t  n)中的ch强制转换为unsigned char,
也就是变成11111111
最终执行完memset函数后,temp对应的内存每一字节都被赋值为11111111
也就是说temp的任意一个元素都为11111111    11111111   11111111   11111111
恰好为-1。0也是类似的。
memset初始化详解 参考文档 Function 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 ... 阅读详情

相关推荐

C++使用memset快速初始化数组

C++使用memset快速初始化数组,用实例说明了数值型和字符型初始化的区别

qq_44938644的博客 1593

【转】memset赋值0和-1,还能赋其他值吗?

参考如下: https://blog.youkuaiyun.com/melody_1016/article/details/83479778 -1 的二进制表示就是 1111 1111 1111 1111 1是int型,占4个字节,二进制表示为 00000000 00000000 00000000 00000001 。 memset每次只能给1个字节的内存单元赋值,1是整型,占4个字节,所以每次只能...

王磊的博客 2534

【C++知识】用memset初始化数组

【C++知识】用memset初始化数组 欢迎关注我,每日更新蓝桥杯备赛好题 and C++学习日记一起成长:)

Kirara的博客 1503

C/C++中使用函数memset对int型数组赋值(0,-1,max,min)

memset

阿正的梦工坊 3336

memset初始化高维数组为-1/0

#include <cstring> int dp[100][100]; memset(dp,-1,sizeof(dp)); memset(dp,0,sizeof(dp)); 完整代码: #include<iostream> #include<cstring> using namespace std; int dp[100][100]; int m...

沉迷单车的追风少年 1381

SAP中寄售结算规则及要点分析

在做MRKO寄售结算时,系统会根据选定的期间和供应商等条件,将符合条件的寄售消耗或寄售上线的物料凭证找出。然后以供应商为单位。合并产生一张会计凭证。下图显示了通过MRKO结算后自动生成的会计凭证。 那么,在MRKO做寄售结算的规则是什么样的?做为寄售业务处理者的物流和财务需要掌握和了解哪些关于寄售结算的规则和控制逻辑。下面以笔者的经验分析一下: 1、寄售物料在系统中有两种处理方法,一种是通过MB1B 411 K ,通常该操作达到两个目的:将物料从仓库转移到线边库(表示即将要投入生产了)的同时将寄售库

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 8297

[C] memset 初始化结果全为 -1

代码如下,打印结果全为 -1 #include<stdio.h> #include<string.h> #define INF 0x7fffffff int main() { int dp[10]; memset[dp, INF, 10*sizeof(int)]; for(int i = 0; i < 10; i++){ pritnf("%10d ", dp[i]); } } 原因是 memset 函数是按字节赋值的,取 0x7fffffff 的低 8 位 0

weixin_43742643的博客 2218

四、Burpsuite工具之proxy模块详解-intercept功能

过了一个年,感觉好久都没有更新了,今天就从burpsuite的更新开始吧。前面已经说过了burpsuite的安装和proxy代理的配置,今天说一下proxy模块中非常有用的intercept功能。intercept是拦截的意思,在这里相当于拦截请求,可以实时的对请求进行拦截,然后请求参数的篡改,再把请求放通,从而达到实时修改请求的功能intercept的总体界面如下图所示其中下图红框中是可以修改请求目标的相关信息。

SmileAssassn的博客 1663

有关memset初始化的问题

因为int占4个字节,一个字节是8bit,0转化为二进制全是0,所以可以用memset,-1转化成二进制全是1,所以也可以用memset,而假如你memset(数组名,1,sizeof(数组名)),那你每个数据的赋值情况将会是这样 : (00000001 00000001 00000001 00000001)->(二进制表示),转换成十进制就会是个挺大的数字所以不能达到想要的1这个要求.

CC031023的博客 490

树莓派5外接RTX显卡:从PCIe到驱动的完整踩坑指南

在ARM架构与GPU加速的交汇点,树莓派5凭借其PCIe接口为DIY爱好者打开了外接独立显卡的大门。然而,PCIe x1的带宽限制、供电差异以及NVIDIA驱动在ARM Linux上的兼容性,使得这一组合成为一场高强度的系统底层排错训练。从理解PCIe总线原理、驱动加载机制到CUDA环境配置,每一步都充满挑战。本文以工程实践视角,梳理外接RTX显卡的完整流程、常见故障与性能瓶颈,并探讨其在边缘计算、AI推理等场景下的真实价值,帮助你理性评估这一实验性方案的可行性与替代路径。

chubaisheng8627的博客 351

基于鸿蒙 UniProton 的汽车电子系统开发指南

基于鸿蒙UniProton实时操作系统,提供了汽车电子系统开发的完整指南。通过统一的设计模式和开发规范,实现了高效、可靠的汽车电子系统开发。

m0_67505153的博客 179

C++:用memset初始化数组

1、初始化数组 定义完数组之后有三种初始化方式 int A[20]={0}; int A[20]; for(i=0;i<sizeof(A)/A[0];i++) A[i]=0; int A[20]; memset(A, 0, sizeof(A)); 此外对于全局变量和静态变量在定义之后会由编译器自动初始化为0 2、关于memset初始化与赋值问题 memset是C/C++提供的函数初始化函...

dashumak的博客 2万+

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

使用memset()函数初始化二维数组

【注意事项】 1.二维整型数组直接利用 memset() 函数初始化时,只能初始化为 0 或 -1 ,否则将会被设为随机值。 2.二维 char 型数组利用 memset() 函数初始化时不受限制,可以初始化任意字符。 二维整型数组 #include<stdio.h> #include<string.h> int main() { int a[10][10]; memset(a,0,sizeof(a)); for(int i = 0;i < 10;i++) { fo

qq_53269459的博客 2万+

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2623

故障诊断 | CNN-BiGRU-Attention故障诊断

故障诊断 | CNN-BiGRU-Attention故障诊断

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 674

使用memset初始化数组

写在前面的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...

随便写写 3733

Untiy之如何实现AI+MR (Pico4u 相机推流MR画面给Server做实时AI图像识别)

本文介绍了基于Pico4U企业版开发AI+MR应用的实现方案。文章详细说明了硬件准备步骤,包括购买企业版设备、申请相机权限和注册管理平台。重点讲解了Unity开发中获取摄像头画面的两种技术方案:通过Overlay直接渲染到Android Surface,或使用API获取图像数据转换为Texture。提供了完整的代码示例和权限配置说明,并揭示了底层通过JNI调用Android原生API的技术原理。该方案适用于带电操作等实习场景,可提升安全性和学习趣味性。

TxNet 1341

关于memset函数初始化数组的“坑”

我们知道,memset函数可以用来把一整块内存全部初始化,一般常用于数组。请看下面的代码 我们定义了一个大小为5的int型数组,意在把数组中的每一个元素都初始化为1。 #define _CRT_SECURE_NO_WARNINGS 1 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; //初始化...

melody_1016的博客 8013

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c++使用memset初始化数组

使用memset初始化数组,该函数是用来给某一块内存空间进行赋值的;包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化; 原型为 : void *memset(void *s, int v, size_t n); 这里s可以是数组名,也可以是指向某一内在空间的指针;v为要填充的值;n为要填充的字节数; 注意,在memset使用时要千万小心,在给ch...

sinat_31608641的博客 1922

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

memset初始化数组易错点

memset(a, 1, sizeof a); 如下代码,不少同学会以为a[]被初始化为1,其实不是的,是被初始化为16843009,为什么是这个数呢? #include <bits/stdc++.h> using namespace std; int n, a[14]; int main() { memset(a, 1, sizeof a); for(int i=0; i<14; ++i){ cout << a[i] << endl; } ret

ypeijasd的专栏 1279

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++数组初始化方式:for循环或memset

1、默认初始化: int arr[26] = {1}; // 初始化为{1,0,0,。。。,0} 注:初始化列表只初始化指出位置处的元素,其他位置默认初始化为0。 参考资料: C/C++数组初始化 2、for循环初始化: int arr[26] = {1}; for(int i = 0; i<26;i++){ // 全部初始化为-1 arr[i] = -1; } 3、memset初始化: int arr[26] = {-1}; memset(arr, -1, sizeof(arr))

个人工作中学到的专业技术与职业发展知识笔记 2155

使用memset()函数初始化二维数组时的注意事项

【注意事项】 使用memset()函数初始化二维数组时要千万小心: 1.二维整型数组利用memset()函数初始化时,只能初始化为0或者-1,否则二维整型数组的值将为随机数。 2.二维char数组利用memset()函数初始化时不受限制,可初始化为任意字符。 【算法代码】 #include <bits/stdc++.h> using namespace std; const int m=3; const int n=5; char a[m][n]; int main() { memse

hnjzsyjyj的专栏 1万+

使用memset初始化int数组

memset()是一个来自于string库的函数,正规用法是初始化char类型的数组。因为char类型只占1个字节,memset按字节赋值后,会将char类型数组的所有元素变为你指定的值。但是4字节的int类型在被memset赋值后,会被重复四次:如使用memset赋值1到int数组后,1转为二进制的一个字节为00000001,赋值完成后为000000010000000100000001...

weixin_30352645的博客 1912

memset()函数对数组初始化

memset函数使用注意事项

unsure_的博客 1518

关于memset初始化动态数组:

今天在刷题的时候想使用复习一下动态数组的使用,就建了一个,结果运行的时候出了一些问题,就是那个貌似数组没有被初始化,所以我就测试了一下,代码如下: int main(){ int n = 10; int *degree1 = new int[n]; memset(degree1,0,sizeof(degree1)); for(int i =0;i<n;i++) cout<<degree1[

Wei_Yuan_2012的专栏 3482
上一篇: 负数在计算机中的表示
下一篇: 大端法、小端法、网络字节序
wakeupwakeup
博客等级 码龄11年 9粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值