通过数组的指针获得数组个数
这几天学习智能指针时,自己在练习写个管理数组指针的类时碰到了通过数组指针获取数组个数的问题
1.在网上查询了通过数组指针获取数组个数的方法,对于自定义数据在前四个节点保存了数组个数
Student* pAry = new Student[3];size_t num = *((size_t*)pAry - 1);//3
测试是成功的,但是是对于内置数据类型int,double,char等就不成功了
2.又晕菜了,又在网上查找,最后获得了_msize()这么个函数,获取New出来的内置数据在堆中的内存块大小,不由就眼前一亮,有内存大小还愁不知道数组个数?
template<typename T>
void GetSize(T* pArray)
{int s= _msize(pArray) / sizeof(T);
}//测试int
int *pAry = new int[5];
GetSize(pAry);//获得5个//char
char *pAry = new char[11];
GetSize(pAry);//获得11//union 这个要注意不能包括对象,可以是对象指针
MyUnion *pAry = new MyUnion[11];
GetSize(pAry);//获得11
这也成功了,反正是内置的数据类型都可以计算出来,
总结一下,
1.内置数据类型用_msize()能获得数组在堆中的内存大小,再通过计算获得数组个数,
注意的是共用体中不能包括对象,不然出错,可以是对象指针
2.关于自定义类型数组,就要用获取对象数组的指针前四个字节来获取数组个数
自定义类型不就是.struct 结构体,class 类,union 共用体吗,除掉共用体就只有二个,
所以,最后的函数写成如下.
template<typename T>
int GetSize(T* pArray)
{const char* pname = typeid(T).name(); //获得类型名称int s = 0;//检查是否是结构体sturct 或是类classif (strstr(pname, "struct") || strstr(pname, "class")) {s = *((size_t*)pArray - 1); //获取对象数组个数}else{s = _msize(pArray) / sizeof(T); //获取内置数据数组个数}return s;
}
测试最后都能获得正确的数组个数
我在windows上用vs2017测试的,大家都可以测试下,看有哪不足的地方请告诉我,谢谢!
相关文章:
通过数组的指针获得数组个数
这几天学习智能指针时,自己在练习写个管理数组指针的类时碰到了通过数组指针获取数组个数的问题 1.在网上查询了通过数组指针获取数组个数的方法,对于自定义数据在前四个节点保存了数组个数 Student* pAry new Student[3];size_t num *((size_t*)pAry - 1);//3测试是成功的…...
GeoServer改造Springboot启动四(解决post接口方法无法用@requestbody为入参的请求)
1、修改源码4 解决问题:解决Controller接口post方法(如图 19)无法用@requestbody为入参的 json数据进行请求,用swagger请求示例如图 20,具体错误呈现如图 21。 图 19Controller接口示例 图 20post接口请求示例 图 21post接...
C#,数值计算——分类与推理Phylagglomnode的计算方法与源程序
1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylagglomnode { public int mo { get; set; } public int ldau { get; set; } public int rdau { get; set; } public …...
mysql、oracle 构建数据
mysql 构建数据 --创建表 set sql_modeONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE TABLE vote_records_memory ( id int(10) unsigned NOT NULL AUTO_INCRE…...
二叉树;二叉树的前序、中序、后序遍历及查找;顺序存储二叉树;线索化二叉树
数组、链表和树存储方式分析 对于树结构,不论是查找修改还是增加删除,效率都比较高,结合了链表和数组的优点,如以下的二叉树: 1、数组的第一个元素作为第一个节点 2、数组的第二个元素3比7小,放在7的左边…...
有手就会做!保姆级Jmeter分布式压测操作流程(图文并茂)
分布式压测原理 分布式压测操作 保证本机和执行机的JDK和Jmeter版本一致配置Jmeter环境变量配置Jmeter配置文件 上传每个执行机服务jmeter chmod -R 755 apache-jmeter-5.1.1/ 执行机配置写自己的ip 控制机配置所有执行机ip,把server.rmi.ssl.disable改成true 将本机也作为压…...
澳洲谷揽GRANAR谷物分析仪维修GR-1800蛋白检测仪
澳洲GRANAR谷揽GR-1800谷物分析仪应用领域:大豆、油菜籽、亚麻籽 常用分析指标:蛋白质、芥酸、水分、灰分 、油脂等 分析时间:<3min 使用场景:谷物收购、生产加工、实验室 GR-1800i型号特点 1.检测时间由3分钟缩短…...
python基础语法(1)
基础语法 前言一、常量和表达式二、变量和类型变量是什么变量的语法(1)定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3)字符串(string)可以使用单引号或双引号创建字符串(4) 布尔(5) 其他(1)类型决定了数据在内存中占…...
Web前端开发——新年倒计实时刷新
Web前端开发——年倒计实时刷新 H5(HTML5)前端开发是指使用HTML5、CSS3和JavaScript等技术进行网页和移动应用的开发。HTML5是最新的HTML标准,提供了丰富的语义化标签和功能,使得网页可以更加优雅和多样化。CSS3是用于样式表的升级版本,提供了更多的样式效果和布局控制能…...
ubuntu20.4 执行sudo apt-get update出现错误 libnettle.so.6 动态链接库错误
一、错误描述 sudo apt-get update 报错提示 libnettle.so.6 动态链接库错误 $ sudo apt update /usr/lib/apt/methods/https: error while loading shared libraries: libnettle.so.6: cannot open shared object file: No such file or directory /usr/lib/apt/methods/ht…...
机器人控制算法——TEB算法—Obstacle Avoidance and Robot Footprint Model(避障与机器人足迹模型)
1.How Obstacle Avoidance works 1.1处罚条款 避障是作为整体轨迹优化的一部分来实现的。显然,优化涉及到找到指定成本函数(目标函数)的最小成本解(轨迹)。简单地说:如果一个计划的(未来&…...
谷歌浏览器报错:VM108:5 crbug/1173575, non-JS module files deprecated.
报错 解决 控制台调整为fast 3G...
Google Colab免费GPU使用教程
目录 前言一、Google Colab介绍二、使用步骤1、创建谷歌云盘2、创建一个新的Colab Notebook3、设置免费的GPU4、挂载Google Drive5、运行代码 三、防止掉线措施四、参考 前言 有时候本地跑代码可能耗时比较久,而且还会耽误你本地电脑的使用,购买云服务器…...
C++标准模板(STL)- 类型支持 (数值极限,C 数值极限接口)
C 数值极限接口 参阅 std::numeric_limits 接口 定义于头文件 <cstdint> PTRDIFF_MIN (C11) std::ptrdiff_t 类型对象的最小值 (宏常量) PTRDIFF_MAX (C11) std::ptrdiff_t 类型对象的最大值 (宏常量) SIZE_MAX (C11) std::size_t 类型对象的最大值 (宏常量) SIG_ATOMI…...
Eclipse Xtext 实现PLC ST 语言到C的转换
Eclipse Xtext 是开发领域专用语言(DSL)的工具。例如数据库的SQL 语言,PLC 的ST 语言都是一种领域专用语言。在开放自动化领域,提倡基于模型的设计方法。DSL 是描述模型的强有力工具。 在开发PLC 程序IDE时,开发ST编译…...
Django中ORM框架的各个操作
我们会好奇,python这么简洁的语言,数据查询是如何做的呢?我将进一步详细和深入地介绍Django中ORM框架的各个方面,包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…...
leetcode 583. 两个字符串的删除操作、72. 编辑距离
两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea…...
flutter 创建插件
资料: flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…...
Framework之旅 -- 后台Recent基础扫盲篇
如果想了解一个事物,是需要展开然后在优化记忆结构的,优化记忆在于后期的个人领悟能力,展开流水账如下,仅为个人记忆笔记,梳理结构有待优化。 TaskDescription,直译看就是task相关的说明了。 看看包含什么…...
全光谱护眼灯有哪些?2023全光谱护眼台灯推荐
随着电子设备的不断普及,手机、平板电脑、显示器、电视机等几乎是家家户户的必备品,也正因为眼睛有那么多时间、那么多机会去盯着屏幕,所以如今近视低龄化现象也越来越严重了。随着科技的不断发展,台灯的发展也越来越多样化&#…...
WeDLM-7B-Base基础教程:32K上下文窗口实现原理与长文本建模优势
WeDLM-7B-Base基础教程:32K上下文窗口实现原理与长文本建模优势 1. 认识WeDLM-7B-Base模型 WeDLM-7B-Base是一款70亿参数规模的高性能基座语言模型,采用了创新的扩散机制(Diffusion)架构。与传统的自回归模型不同,它…...
3D Face HRN部署案例:为AI绘画平台增加‘2D→3D人脸’创意增强功能模块
3D Face HRN部署案例:为AI绘画平台增加‘2D→3D人脸’创意增强功能模块 想象一下,你是一个AI绘画平台的开发者。用户上传了一张精美的2D人像画作,但总觉得少了点什么——画面是平面的,缺乏立体感和深度。如果能一键将这张2D人像转…...
STM32 AES256加密串口IAP升级Bootloader程序及上位机软件全套资料获取:加...
stm32 AES256加密 串口IAP升级 bootloader程序 通过上位机将keil生成的BIN文件进行AES加密,得到新的加密文件,加密需要自己设置秘钥,加密升级包直接烧录不能运行。 通过串口升级上位机将加密包发送到单片机, 单片机接收到数据后&a…...
RISC-V微架构侧信道攻击检测技术解析
1. RISC-V微架构侧信道攻击检测技术解析 在开源指令集架构RISC-V快速普及的背景下,其微架构安全问题日益凸显。最近我在使用gem5仿真器研究RISC-V处理器时,发现了一种名为FlushFault的微架构侧信道攻击,这种攻击通过操纵指令缓存状态和异常处…...
别再手动改配置了!用FRP v0.61.0的Web仪表盘,图形化搞定内网穿透
FRP v0.61.0 Web仪表盘:可视化内网穿透管理新体验 每次修改配置文件都要重启服务?还在用命令行查看连接状态?FRP v0.61.0的Web仪表盘功能将彻底改变你的内网穿透管理方式。这个被许多用户忽略的"隐藏功能",实际上能大幅…...
别再乱配了!手把手教你搞定RK809 Codec的MIC差分与单端输入(附DTS配置避坑)
RK809 Codec硬件配置实战:从差分与单端输入原理到DTS避坑指南 在嵌入式音频系统开发中,RK809这颗高度集成的音频Codec芯片因其出色的性价比和丰富的功能接口,成为RK3568等主流嵌入式平台的首选音频解决方案。但许多开发者在实际调试过程中&am…...
从WiFi到SDR:如何为你的机器人集群挑选合适的“数传”硬件?(避坑指南与组网实测)
从WiFi到SDR:机器人集群通信硬件选型实战手册 当二十台自主移动机器人需要在500米半径的仓库内同步位置数据时,WiFi模块频繁掉线;当野外搜救集群需要跨越3公里峡谷传输高清图像时,常规数传模块集体失联——这些真实场景暴露出机器…...
面试官问‘最大流’怎么答?Ford-Fulkerson、EK、Dinic算法Python横向评测与选型指南
最大流算法实战指南:Ford-Fulkerson、EK与Dinic的工程选择策略 当面试官抛出"如何求解网络最大流"这个问题时,大多数候选人会机械地复述算法步骤,却很少有人能说清楚为什么不同场景下要选择特定算法。本文将带您深入三种经典算法的…...
WeAct CAN485开发板:工业物联网的多协议通信解决方案
1. WeAct CAN485开发板深度解析作为一名长期从事工业物联网开发的工程师,我最近测试了WeAct Studio推出的CAN485开发板。这款售价仅9.28美元的小板子让我印象深刻——它完美平衡了成本与功能,特别适合需要CAN总线和RS485通信的嵌入式项目。1.1 核心硬件配…...
Ubuntu 22.04 升级 Node.js 18 踩坑记:手把手教你搞定恼人的 NO_PUBKEY 签名错误
Ubuntu 22.04 升级 Node.js 18 全流程避坑指南:从 NO_PUBKEY 错误到优雅解决 最近在将 Ubuntu 22.04 上的 Node.js 升级到 18.x 版本时,遇到了一个典型的开发环境配置问题——NO_PUBKEY签名错误。这个问题看似简单,却隐藏着 Ubuntu 软件源管理…...
