嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理

news2024/10/6 18:24:04

目录

  • 嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理
    • 变量、指针和指针数组的内存占用
    • 指针、指针数组的空间验证
    • 指针数组的元素数据访问方法

嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理

变量、指针和指针数组的内存占用

在标准C的整型变量是32位,也就是4字节。但是,在在某些编译平台上,整型的长度则取决于硬件结构。在嵌入式平台上,往往还有short 等类型,一般来说,对于变量区分为有符号型与无符号型。有符号型,由于最高位为符号位:

	short 内存占两字节,范围为-2^15~(2^15-1)		
	int  内存占四字节,范围为-2^31~(2^31-1)		

而对于无符号型:最高位不表示符号位

	unsigned short 占两字节,范围为0~2^16-1		
	unsigned int  占四个字节,范围为0~2^32-1

比较特殊的是指针

     unsigned char *pChar;
     unsigned short *pShort;
     unsigned int  * pInt;

无论指向的数据是什么类型,由于指针存储的是变量的地址,在32bit系统中,
*pChar、*pShort 和 *pInt 均占用32字节。

而指针数组的每个元素均为指针,所以,指针数组所占用内存的大小:

                  指针数组元素内存大小 * 元素个数

指针、指针数组的空间验证

我们首先声明几个数组:

unsigned char	Cmd1_Data[10]={0x68,0x13,0x00,0xDF,0x16};  
unsigned char	Cmd2_Data[10]={0x68,0x14,0x00,0xDF,0x16};  
unsigned char	Cmd3_Data[10]={0x68,0x15,0x00,0xDF,0x16};  
unsigned char	Cmd4_Data[10]={0x68,0x16,0x00,0xDF,0x16};  

在声明一个指针数组:

unsigned char *Cmd[] ={Cmd1_Data,Cmd2_Data,Cmd3_Data};

我们来验证下存储空间的大小:

int i,len;
unsigned char *pcmd;
int *plen = &len;
pcmd=Cmd[0];
len = *pcmd;
printf(" DL645Cmd size = %02d, pcmd size = %02d,plen size = %02d  i size = %02d \n,",sizeof(Cmd),sizeof(pcmd),sizeof(plen),sizeof(i));

运行后可以看到:

在这里插入图片描述
可以看到,Cmd的大小为16,为4个指针元素的大小之和。怎么通过指针数组访问各个数组的元素昵?

指针数组的元素数据访问方法

我们以访问第二个数组为例,功能实现如下:

     num = 1 ;//数组下标从0开始,所以,第二个数组下标为1
	pcmd=Cmd[num ];
     for(i=0;i<len;i++)
    	   {
    			buff[i] = *(pcmd+i);
    			printf("%02X,",buff[i]);
    	   }
    printf("\n");

如果要访问其他数组,可以动态更改num的值,或做成一个循环读取全部数组元素的值即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【趣学算法】第一章读书笔记

14天阅读挑战赛 *努力是为了不平庸~ 算法学习有些时候是枯燥的&#xff0c;这一次&#xff0c;让我们先人一步&#xff0c;趣学算法&#xff01; 文章目录1.1打开算法之门1.2 妙不可言——算法复杂性算法的特性好算法的标准时间复杂度和空间复杂度时间复杂度空间复杂度宕机1.4算…

62. 如何通过增强(Enhancement) 的方式给 SAP ABAP 标准程序增添新功能

文章目录 如何找到可以创建增强实现的增强点位置如何创建增强实现如何在 SE80 里找到增强实现本身如何调试 ABAP 增强实现总结ABAP 系统有比较完善的修改控制权限管控,比如笔者试图修改一个 SAP ABAP 系统里标准的函数,就会遇到如下的警告消息,然后修改的尝试会被阻止: You…

Winform和ASP.NET、Web API详解

Winform和ASP.NET、Web API 一、winform基础 1.1 基础学习 1、 winform应用程序是一种智能客户端技术&#xff0c;我们可以使用winform应用程序帮助我们获得信息或者传输信息等。 2、属性 Name:在后台要获得前台的控件对象&#xff0c;需要使用Name属性。 visible:指示一…

认识运营商机房

文章目录走线设备机房走线数据机房走线传输机房列头柜【供电】网络架构ONU设备OLT设备汇聚层交换机BARS设备核心路由器运营商网络架构【必看】铁塔基站核心机房ODF&#xff1a;光纤配线架MME光纤SGWPGWHSS交换机拓扑核心机房拓扑接入层基站&#xff08;BaseStation&#xff09;…

山西大同大学技术会,大同大学的家!

大家好&#xff0c;我是康来个程&#xff0c;山西大同大学技术会的创建者。 低谷时代 近几年校内的竞赛氛围越来越浓厚&#xff0c;随着自身参与并了解的赛事越来越多&#xff0c;随之而来的也是发现了我们学校竞赛方面的问题。疫情原因&#xff0c;我们的比赛取消的取消&…

Gitee在大数据中心的使用

在本地主机或者可以VSCode直接连接可视化的服务器上 1. 首先在gitee新建一个带有develop分支的仓库 2. 在自己的主机&#xff08;e.g., server 1~3&#xff09;上git clone下来&#xff0c;例如 git clone gitgitee.com:PeterBishop0/TransT-based.git 3. 切换成develop分支&…

深度学习入门(十) 模型选择、过拟合和欠拟合

深度学习入门&#xff08;十&#xff09; 模型选择、过拟合和欠拟合前言模型选择例子&#xff1a;预测谁会偿还贷款&#xff1f;训练误差和泛化误差验证数据集和测试数据集K-则交叉验证总结过拟合和欠拟合模型容量模型容量的影响估计模型容量VC维线性分类器的VC维VC维的用处数据…

[云原生之k8s] Kubernetes原理

引言 单机容器编排&#xff1a;docker-compose 容器集群编排&#xff1a;docker swarm、mesosmarathon、kubernetes 应用编排&#xff1a;ansible 一、Kubernetes是什么&#xff1f; Kubernetes的缩写为&#xff1a;K8S&#xff0c;这个缩写是因为k和s之间有八个字符的关系…

线段树模板

好文分享&#xff1a;【数据结构】线段树&#xff08;Segment Tree&#xff09; - 小仙女本仙 - 博客园 线段树和树状数组的基本功能都是在某一满足结合律的操作(比如加法&#xff0c;乘法&#xff0c;最大值&#xff0c;最小值)下&#xff0c;O(logn)的时间复杂度内修改单个元…

Python回归预测建模实战-支持向量机预测房价(附源码和实现效果)

机器学习在预测方面的应用&#xff0c;根据预测值变量的类型可以分为分类问题&#xff08;预测值是离散型&#xff09;和回归问题&#xff08;预测值是连续型&#xff09;&#xff0c;前面我们介绍了机器学习建模处理了分类问题&#xff08;具体见之前的文章&#xff09;&#…

x86 --- 任务隔离特权级保护

程序是记录在载体上的数据和指令。 程序正在执行时的一个副本叫做任务 所有段描述符都放在GDT --> 不做区分。 内核程序&#xff08;任务&#xff09;所占段在GDT中&#xff0c;用户程序&#xff08;任务&#xff09;所占段在LDT中 --> 做区分。 每个任务都有自己独立的…

【无标题】

第1章 概述 本章主要内容&#xff1a; 互联网的概念&#xff08;标准化&#xff09;、组成、发展历程&#xff1b;电路交换的基本概念、分组交换的原理&#xff1b;计算机网络的分类、性能指标及两种体系结构。 重点掌握&#xff1a; 在计算机网络分层模型中&#xff0c;网…

7、GC日志详解

目录如何分析GC日志参数配置程序运行GC日志打印解析GC日志数据分析指定其他垃圾收集器CMSG1GC分析工具JVM参数汇总查看命令如何分析GC日志 参数配置 对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来&#xff0c;然后分析gc日志得到关键性指标&#xff…

目标检测算法——遥感影像数据集资源汇总(附下载链接)

关注”PandaCVer“公众号 深度学习资料&#xff0c;第一时间送达 目录 一、用于 2-5 分类问题 1.UCAS-AOD 遥感影像数据集 2.Inria Aerial Image Labeling Dataset 3.RSOD-Dataset 物体检测数据集 二、用于 5-10 分类问题 1.RSSCN7 DataSet 遥感图像数据集 2.NWPU…

孙宇晨接受韩国媒体专访:熊市受宏观经济的不确定性影响

10月27日至10月29日&#xff0c;韩国釜山备受关注的大型区块链活动 2022 釜山区块链周&#xff08;BWB 2022&#xff09;在釜山会展中心&#xff08;BEXCO&#xff09;举行。韩国区块链媒体TokenPost 对出席活动的波场TRON创始人孙宇晨进行了专访。10月28日&#xff0c;该媒体发…

Nginx快速入门部署前端项目

目录 一&#xff0c;Nginx简介 1.1 负载均衡 演示 1.1.2 安装nginx 再复制一份一样的tomcat并修改端口号 打开两个tomcat的服务 打开防火墙中的8081端口 修改Nginx配置 重启Nginx服务&#xff0c;让配置生效 1.2 反向代理 Nginx项目部署 1.确保前端项目能用 2.将前台项目…

看过来,Windows 11 Insider Preview 25231.1000推送啦!

微软于近日凌晨发布新的Windows 11内部预览版系统&#xff0c;版本号为25231.1000&#xff0c;该系统对平板任务栏体验进行了改进&#xff0c;修复了系统托盘、设置等问题。下面一起来看看完整的更新内容。 更新日志 TL&#xff1b;速度三角形定位法&#xff08;dead reckoning…

【ASM】字节码操作 转换已有的类 清空方法体

1.概述 在文章:【ASM】字节码操作 转换已有的类 移除Instruction 移除NOP 中我们学会了如何移除NOP。 本章我们将学习如何清空方法体。 1.1 如何清空方法体 在有些情况下,我们可能想清空整个方法体的内容,那该怎么做呢?其实,有两个思路。 ●第一种思路,就是将instructi…

Spring中事务的传播机制以及REQUIRED、REQUIRES_NEW、NESTED区别以及代码演示

​&#x1f4d2;个人主页&#xff1a;热爱生活的李&#x1f4d2; ​❤️感谢大家阅读本文&#xff0c;同时欢迎访问本人主页查看更多文章​❤️ &#x1f64f;本人也在学习阶段&#xff0c;如若发现问题&#xff0c;请告知&#xff0c;非常感谢&#x1f64f; 事务隔离级别demo理…

[计算机网络]第一章 概述 -- 1.1 计算机网络在信息时代中的作用 1.2 互联网概述

文章目录1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2 互联网基础结构发展的三个阶段第一阶段第二阶段第三阶段1.2.3 互联网标准化工作1.1 计算机网络在信息时代中的作用 21世纪是以网络为核心的信息时代&#xff0c;21世纪的重要重要特征&#xff1a…