嵌入式学习25-复习指针要点

1指针
1.1语法:
【基类型*指针变量名】
【int *p=&a】
1
2
1.2语义:
【基类型】:指针变量指向的目标的数据类型
【*】:表示此时定义的变量是一个指针类型的变量
【&a】:一块存放着int类型数据的空间的地址
【*p】:
通过指针间接访问变量的过程:
(1)首先拿出p指针变量中的 值 (地址)到内存中定位找内存单元的编号
(2)从定位处开始,偏移出sizeof(基类型)大小的一块空间(确定所需内存空间大小
(3)把这块空间当做一个基类型的变量来看 (检索存储值
1
2
3
4
5
6
7
8
1.3指针变量的应用:
1.3.1在函数间传递信息被调函数修改主调函数的数据
1.两步:
(1)将主调中想被修改的变量的地址传给被调(【&】传址)
(2)必须要做【*】运算(间接访问),实现修改(【*】改值)
2.练习:
1:求两个数的和
2:求两个数中的大值,小值
1
 


3:使用指针将数组逆序
1

1.3.2用于处理数组的函数中
1.通过指针传递地址函数可以直接操作源数据。(效率高)
2.要注意使用【const】关键字保护数组中的数据
3.使用递增递减指针操作数组需要注意数据越界问题,                                                                    c只保证指向数组及数组后面第一个位置的指针有效。

1.4指针相关操作
1.4.1取地址
【&】:
1
1.4.2间接访问数据(解引用)
【*】:*运算符给出指针 指向地址上储存的值
注意:
(1)未初始化的指针解引用的结果是未定义的(随机值)
1
2
3
1.4.3指针与整数相加
【p+1】:地址偏移
【p-1】:如果相减的结果超出了初始指针所指向数组的范围,计算结果是未定义的。
1
2
1.4.4递增指针
【p++】:
【p--】:
1
2
1.4.5指针的关系运算
【>】:
【>=】:
【<】:
【<=】:
【==】:
【!=】:
1

1.4.6指针减指针
前提:两个指针是同一类型的指针
【p-q】:表示指针之间差了几个基类型。
【p+q】:指针不能做加法运算。

1.5指针中的优先级问题
1.【*】的优先级高于【+】。
2.【*】和【++】的优先级相同,结合性是从右至左。
3.【*】的优先级低于【[  ]】。
1
2
3
1.6指针的应用
1.6.1系统数据存储方式(大小端)
补充:
(1)野指针:指针指向不明确,随机;故通常将指针初始化为NULL;【NULL】:表示0号地址
(2)未初始化的指针,不要进行解引用。(值存储的位置不明确)
(3)数组的越界指针只有一个可以进行解引用:C只能保证指向数组任意元素的指针和指向数组后面第1个位置的指针有效。
(4)指针变量的格式转换说明:
【%p】:
【%u】:
【%lu】:
1

2指针与数组
2.1数组指针
2.1.1一维数组
【int (*p)[2];】:p指向一个内含2个【int】类型值的数组的指针。
详解:p是一个指针,指向一个数组,该数组有两个元素。
1
2
2.1.2二维数组
【ar[3][2]】:ar是指向数组的指针,该数组内含2个int类型的元素
1
2.2指针数组
2.1.1一维数组
【int *p[2];】:p是一个内含2个指针的数组,每个指针都指向【int】类型的元素。

2.1.2二维数组
3指针与指针
3.1
3.2二级指针
3.2.1语法
【基类型 **p;】     
基类型:指针类型
p:二级指针变量名

3.2.2语义
指向指针的指针,用于指向一个指针的地址
理解:
1.指针变量
2.指针变量的地址

【*p】:一级指针本身
【**p】:二级指针所指向的变量值
【**p=a    *p=&a    p=&*p】 
【**p】: 二级指针变量(p)中存放的是一级指针变量(*p)的地址(&*p)

一级指针变量(*p)中存放的是基类型变量(a)的地址(&a),基类型变量的值(**p)。
【ar[i][j]】:二级指针变量(ar)中存放的是一级指针变量(ar[i])的地址(&ar[i]),一级指针变量(ar[i])中存放的是基类型变量(a,b,c,d...)的地址(&a,&b,&c,&d...),基类型变量的值(ar[i][j]),即(a,b,c,d...)。


3.2.3二级指针的应用
(1)二级指针主要用于多级数据之间的传递
(2)传递一级指针的地址进函数,从而在函数内改变函数外一级指针的值,而一级指针的值可能为某个变量的地址
1
2
4指针与函数
5.指针与【const】
5.1一级解引用
在一级解引用的前提下:
(1)【const】限定的指针可以指向普通指针和【const】限定的指针
(2)普通指针(非【const】限定的指针)只能指向普通指针
参照:【c primer plus 第6版-10.6.2-P557】
(3)【const* p】:不能改变指向的
(4)【*const p】:不能改变指向的地址。(理解:【*p】是取值,【p】是取地址)
1

6指针的兼容性
(1)不同的指针类型不具有兼容性(如int类型的指针不能兼容double类型的指针;指向指针的指针与指向数组的指针)
(2)

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

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

相关文章

Flutter开发LongPressDraggable、Draggable 的onDragEnd没有被调用

文章目录 onDragEnd 什么时候执行&#xff1f;onDragEnd 在拖动结束时没有被调用的可能原因 onDragEnd 什么时候执行&#xff1f; onDragEnd 回调函数在拖动结束时执行&#xff0c;但要注意&#xff0c;拖动结束有多种情况&#xff0c;不仅仅是松开手指触发的。 onDragEnd 会…

【国产MCU】-CH32V307-通用定时器(GPTM)-单脉冲模式

通用定时器(GPTM)-单脉冲模式 文章目录 通用定时器(GPTM)-单脉冲模式1、单脉冲模式介绍2、驱动API介绍3、单脉冲使用实例本文将详细介绍如何使用CH32V307通用定时器的单脉冲模式。 1、单脉冲模式介绍 单脉冲模式可以响应一个特定的事件,在一个延迟之后产生一个脉冲,延迟…

Seata 的 AT 模式

目录 概述 Springcloud 整合 Seata 数据库脚本 服务依赖 Springboot 配置 代码改造 AT模式下的数据隔离 写隔离 读隔离 概述 Seata 的 AT 模式是 Seata 的默认模式&#xff0c;它的原理是依赖于数据库事务&#xff0c;以数据库事务保证本地事务分支特性&#xff0c;结合…

windows系统用VS环境开发linux程序之一

主要有两种方法&#xff0c;一种是在windows中安装linux子系统&#xff0c;即WSL&#xff0c;另一种是windows系统装linux虚拟机。 这里先用虚拟机方法。参考文章&#xff1a; 用VS2015开发Linux程序详细教程-配置篇_vs2015可以在linux安装吗-CSDN博客 这篇基本就够了。不过…

nginx之web性能location优先级

4.2 event事件 events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动&#xff0c;Nginx支持众多的事件驱动&#xff0c;比如:select、poll、epoll&#xff0c;只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个…

设计模式之委派模式

文章目录 前言正文一、生活中的例子二、Java代码实现2.1 类设计2.2 代码实现2.2.1 Employee2.2.2 ArchitectureDesignEmployer2.2.3 BackEmployer2.2.4 FrontEmployer2.2.5 Leader2.2.6 EmployeeStrongPointEnum2.2.7 Boss 2.3 测试2.3.1 Client2.3.2 测试结果 三、委派模式的优…

Docker Desktop 4.27.1 Windows 10 安装 教程

Docker Desktop 4.27.1 Windows 10 安装 版本要求windows 版本要求wsl 版本要求docker desktop 版本 安装首先确保系统版本符合要求前提下安装wsl安装 Dockers Desktop安装说明 安装问题docker Desktop 无法正常启动&#xff0c;提示wsl 相关信息wsl --install 执行输出帮助日志…

Python 程序中查看 Python version

Python 程序中查看 Python version 1. Code2. OutputReferences 1. Code #!/usr/bin/env python3 # -*- coding:utf-8 -*-import platform import sysprint("\nplatform.python_version():") print(platform.python_version())print("\nsys.version:") pr…

springboot大学生体质测试管理系统源码和论文

大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息&#xff0c;通过留言区互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分&#xff0c;系统管理员主要功能包括首…

图像分类入门:使用Python和Keras实现卷积神经网络

文章标题&#xff1a;图像分类入门&#xff1a;使用Python和Keras实现卷积神经网络 简介 图像分类是计算机视觉领域的一个重要任务&#xff0c;它涉及将图像分成不同的类别或标签。卷积神经网络&#xff08;CNN&#xff09;是图像分类任务中的一种常用模型&#xff0c;它能够…

rust实战系列十四:复合数据类型

复合数据类型可以在其他类型的基础上形成更复杂的组合关系。 本章介绍tuple、struct、enum等几种复合数据类型。数组留到第6章介绍。 2.3.1 tuple tuple指的是“元组”类型&#xff0c;它通过圆括号包含一组表达式构成。tuple内的元素没 有名字。tuple是把几个类型组合到一起的…

第三十九天| 62.不同路径、63. 不同路径 II

Leetcode 62.不同路径 题目链接&#xff1a;62 不同路径 题干&#xff1a;一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…

c#之列表

// List<int> scoreList new List<int>();//创建空列表var scoreListnew List<int>();//匿名方式创建scoreList.Add(912);//插入数据scoreList.Add(45);scoreList.Add(415);scoreList.Add(452);scoreList.Add(4451);scoreList.Add(245);scoreList.Add(445);…

十六、多边形填充和绘制

项目功能实现&#xff1a;对多边形进行轮廓绘制和填充 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 mult-drawing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class Mult_Drawing { public:void mult_drawing(); };#pragma onc…

vue如何动态加载显示本地图片资源

在实际开发中&#xff0c;根据某一个变量动态展示图片的情况有很多。实现方法分打包构建工具的差异而不同。 1、webpack的项目 require引入图片资源 2、vite的项目 new URL(url,base).href 疑问解答&#xff1a;为什么vite项目不可以用require&#xff1f; 原因在于&#xf…

Elastic Stack--01--简介、安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

微信小程序独立分包与分包预下载

官网链接 独立分包配置方法 独立分包使用限制 独立分包中不能依赖主包和其他分包中的内容&#xff0c;包括 js 文件、模板、wxss、自定义组件等&#xff1b;App 只能在主包内定义&#xff0c;独立分包中不能定义 App&#xff0c;会造成无法预期的行为独立分包中暂时不支持使用…

cocos creator3.x项目打包成aar 加入到已有的Android工程

Cocos crearor版本&#xff1a; 3.4.2 Android Studio Flamingo | 2022.2.1 Patch 2 1、配置构建安卓项目 2、 运行编译无报错 出现问题可尝试修改Gradle版本 修改jdk版本 3、对libservice打包成aar 打包完后 再build/outputs找到aar 如果看不到Tasks模块&#xff0c;在Fil…

sqlserver触发器

在SQL Server中&#xff0c;触发器是一种特殊的数据库对象&#xff0c;它们会在表上执行特定的操作时自动触发。触发器可以用于在表上插入、更新或删除数据时执行自定义的逻辑。触发器通常用于实施数据完整性约束、审计和日志记录等操作。 触发器有三种主要类型&#xff1a; 插…

人机交互新研究:MIT开发了结合脑电和眼电的新式眼镜,与机器狗交互

还记得之前的AI读心术吗&#xff1f;最近&#xff0c;「心想事成」的能力再次进化&#xff0c; ——人类可以通过自己的想法直接控制机器人了&#xff01; 来自麻省理工的研究人员发表了Ddog项目&#xff0c;通过自己开发的脑机接口&#xff08;BCI&#xff09;设备&#xff…