嵌入式——C语言:指针①

一、指针特点

        1.让代码更加简洁高效

        2.提供直接访问内存的操作

        3.利用指针可以直接操作硬件

二、指针概念

(一)地址:为了区分内存中不同字节的编号(0到2^16-1)

(二)指针:指针就是地址,地址就是指针,指针地址多了指向的概念

(三)指针变量:存放指针(地址)的变量(64位操作系统中所有指针变量均为8个字节

三、指针相关运算符

        1.&:取地址运算符,获得变量在内存空间中的首地址

                1.1只有变量(左值(可以写在等号左边))才能&,常量和表达式不能进行&操作

                1.2&构成的表达式为:变量在内存空间中的首地址

                        int Num = 0;

                        &Num:得到Num在内存空间4字节空间中的首地址

                1.3&构成的表达式类型位:变量的类型升级后的类型

                        int Num;

                        &Num:int -> int *

        2.*:获得指针指向的空间,或者对应空间中的值

                2.1*运算符连接的内容必须为指针类似,不能是普通变量类型

                2.2如果直接使用*对应的表达式,表达式值为:该指针指向空间中的值

                        *&Num;        //获取&Num指向的空间中int类型的值

                2.3如果使用*对应的表达式其类型为:指针类型降级后的类型

                        int *p;

                        *p;//int * -> int

                2.4*对应的表达式作为左值表示,将等号右边的值放入指针指向的空间

四、指针变量的定义

                不能使用未初始化的指针

(一)存储类型 数据类型 *变量名

(二)野指针

        定义:未经初始化的指针或者指向已经被释放空间的指针

(三)空指针(NULL)

        定义:指向内存空间为0x0的指针称为空指针 

         内存地址0x0空间为只读空间,不能复制,NULL指针不能执行*p = value操作

五、指针特性

        变量的访问形式

(一)直接访问:通过变量的变量名访问变量空间

(二)间接访问:通过变量在内存中的地址访问变量空间

六、指针的算术运算

(一)算术运算符

        指针偏移的大小由指针指向的数据类型大小决定

        两个指针相减:两个地址间相减数然后除数据类型

(二)不同指针类型之间的区别

        1.*操作时处理方式不同

        2.算数运算

六、指针常见操作

        注意:指针有两个需要请注意的概念:指针变量的本身,指针指向的空间。

                1.对指针变量:p或者q修改,改变的是指针的指向

                2.对*p或者*q:改变的是指针指向的空间,但是它的指向是不变的

七、指针作为函数参数

(一)值传递

        1.实参将值传给形参,形参值改变

        2.函数体内部想使用函数体外部变量值的时候,使用值传递

(二)地址传递

        1.实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值

        2.函数体内部想修改函数体外部变量的值的时候,使用地址传递

八、练习

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

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

相关文章

RabbitMQ—HAProxy负载均衡

上篇文章: RabbitMQ—仲裁队列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshareblogdetail&sharetypeblogdetail&sharerId149312579&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 HAProxy安装…

QT中启用VIM后粘贴复制快捷键失效

当在QT中启用FakeVim之后,Ctrl C 和 Ctrl V 快捷键就变成 Vim 的快捷键了,我希望它还是原来的复制粘贴功能,打开:编辑 > Preferences…,然后勾选 “Pass control keys”即可,如下:

TCP三次握手与四次挥手全解析

🌊 TCP三次握手与四次挥手全解析(含序列号动态追踪)🔑 TCP 协议核心机制 序列号 (seq):数据字节流的唯一标识(32位循环计数器)确认号 (ack):期望接收的下一个序列号(ack …

7月26号打卡

作业:题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一…

C++/CLI与标准C++的语法差异(一)

🌌 C/CLI与标准C的语法差异(一)🔬 第一章:类型系统革命 - 彻底解构三语言范式 🧪 1.1 类型声明语义差异矩阵 #mermaid-svg-L5kQ3iy05pKo4vIj {font-family:"trebuchet ms",verdana,arial,sans-se…

输电线路微气象在线监测装置:保障电网安全的科技屏障

在电力传输网络中,输电线路微气象在线监测装置通过集成专业传感器与智能分析技术,实现对线路周边环境参数的实时采集与动态分析,为电网运行安全提供数据支撑。该设备针对输电线路特殊工况设计,具备高适应性、高可靠性特点。工作原…

基于springboot的图书借阅系统

用户:借阅信息管理,续借信息管理,还书信息管理,图书信息,系统公告,留言板,我的中心管理员:图书信息管理,图书类型管理,借阅信息管理,续借信息管理…

Xinference vs SGLang:详细对比分析

概述对比特性XinferenceSGLang定位通用AI模型推理平台高性能LLM服务框架专注领域多模态模型统一接口LLM推理性能优化设计理念易用性和兼容性性能和效率核心架构对比 Xinference 架构特点 Xinference 架构: ├── API层(REST/CLI/Python) ├─…

双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥

一.经验分享个人情况:初试总分377,政治59,英语二75、数学二103、专业课140。本科为湖南一所双非一本,专业是电子信息工程,本科成绩一般,无奖学金无评优无科研竞赛,属于三无人员&…

配置DNS正反向解析

服务端master配置:yum install bind -y配置静态ip:修改配置文件:主:区域:正向解析:反向解析:开启服务:客户端node1配置:yum install nginx -y配置静态ip:使用xftp将文…

MyBatis-Plus 通用 Service

引言 在开发 Java Web 应用程序时,我们经常需要进行大量的数据库操作,如创建、读取、更新和删除(CRUD)。MyBatis-Plus 作为一个强大的 MyBatis 增强工具,为我们提供了通用 Service 接口,极大地简化了这些操…

聚类-一种无监督分类算法

目录 1、聚类任务 2、性能度量 (1)外部指标 (2)内部指标 3、具体聚类方法 (1)原型聚类 (2)密度聚类 (3)层次聚类 “无监督学习”(unsupervised learnin…

ES6 标签模板:前端框架的灵活利器

ES6(ECMAScript 2015)引入的模板字符串(Template Literals)为 JavaScript 开发者提供了更简洁的字符串处理方式,而模板字符串标签(Tagged Template Literals)则进一步扩展了其功能性。通过标签函…

解锁编程核心能力:深入浅出数据结构和算法

——为什么它们是你代码效率的终极武器? 🌟 引言:程序世界的基石 想象你正在建造摩天大楼:数据结构是钢筋骨架,决定建筑的结构与承重能力;算法则是施工蓝图,指导如何高效完成建造。两者结合&am…

Jenkins运行pytest时指令失效的原因以及解决办法

错误收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL数据库本地迁移到云端完整教程

一、准备工作 安装MySQL客户端工具获取云端数据库连接信息: 主机地址端口号用户名密码数据库名二、本地数据库导出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 数据库名 > backup.sql执行后会提示输入密码,完成后会在当前目录生成backup.sql文件 三、…

InvokeRepeating避免嵌套调用

InvokeRepeating嵌套这会导致指数级增长的重复调用堆叠。使用单一协程PeriodicActionRoutine替代所有InvokeRepeating避免方法间相互调用造成的堆叠如果需要多层级时间控制(如主循环子循环):IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的浏览器AI助手

🧨 一、什么是 Sider? Sider 是一个 Chrome 浏览器插件,你可以把它看作一个「网页边上的 AI 小助手」。 🗣️ 它就像你网页旁边的 AI 机器人,可以帮你回答问题、总结文章、翻译、写文案、改写内容、甚至帮你学习英文&…

C++:list(2)list的模拟实现

list的模拟实现一.list与vector1.底层结构的本质区别2.模拟实现的核心差异2.1数据存储的方式2.2 初始化的过程2.3 插入元素的操作2.4 删除元素的操作2.5 访问元素的效率3.总结二.头文件list.h1. **命名空间与模板**2. **核心数据结构**3. **构造函数**4. **模板参数设计**5. **…

【595驱动8*8点阵】2022-9-11

缘由LED点阵屏只能一次亮一列-嵌入式-CSDN问答 #include "REG52.h" sbit dsP1^0;//数据线 595的14脚 sbit shP1^1;//数据输入时钟线 595的11脚 sbit stP1^2;//输出存储器锁存时钟线 595的12脚 void QuDong595(unsigned char sj) {unsigned char aa8;while(aa--){ds…