【【STM32学习-3】】

STM32学习-3

在这里插入图片描述
下面是对c语言的稍微复习
这个是我们设置好的文件 以后拖出去用就可以了
这里加入关于指针的感想
关于指针数组和数组指针的想法
常规的东西是int a=10;
int * p=&a; (p指向了a元素,意思是p等于a的地址 类型是int*)就是 整型指针
然后我们在做别的操作时 解引用 *p 就可以改变a的值了

int main()
{
int a = 0;
int* p = &a;
*p = 1;
printf("%d\n", a);
printf("%d\n", *p);
printf("%d\n", *(&a));
return 0;
}

很明显这三个值都是1
那么接下来我介绍一个数组的概念
数组 int arr[5]={1,2,3,4,5};
数组名arr只有在计算长度size(arr)或者&arr的时候才表示整个数组的地址!!!!这个概念非常重要
现在我们先从一位数组出发

int arr[5] = { 1,2,3,4,5 };
int* p = arr;

此处的arr是什么它不属于我们上述提到的两种情况之中,所以这个名字代表的是首元素地址

int main()
{
int arr[5] = { 1,2,3,4,5 };
int* p = arr;
printf("%d\n", arr);
printf("%d\n", p);
return 0;
}

这就说明首元素地址和p值是一样的,其实他们都算是指针类型 ,指向首元素
为了确信我们修改代码再次证明

printf(%d\n”, *arr);
printf(%d\n”, p);发现结果是一样的说明这个arr是指针类型的一种特殊形式它正好是数组名 ,然后为了以示区分 我们才用了一个新的变量p(也是指针类型)去代替它既然理解了我上面的这段话那么下面的代码应该是相对容易的int main(){int arr[5] = { 1,2,3,4,5 };int p = arr;
printf("%d\n", *arr);//1
printf("%d\n", *p);//1
printf("%d\n", p+1);//2 先加再取地址 地址加1就是数组移到下一位printf("%d\n", 

好的那么我们稍微修改一下这个代码把int p = arr;改成 int( p)[5] = &arr;先再讲述一个问题我们只讲结论&arr 表示的是整个数组的地址!!!!然后 分析int( p)[5]这句话的意思是 p是一个指针 该指针指向了一个数组,指向了一个数组,指向了一个数组,重要的话说3遍。 该数组有5个元素 每个元素类型是int 所以他叫 数组指针 !!!c语言就是这么规定的所以我写上&arr 表示整个数组的地址,这样我的指针p [5] 才能指示出arr中的全部元素!!!这样的话int p=&a; p指向了a的地址,p=a
int( p)[5] = &arr; p指向了整个数组的地址 那么同理 *p=arr *p就是数组arr 而数组arr,在我们的眼中就是首元素地址
好的接下来仅仅修改这一条语句看代码
(&arr既然是全部元素的地址,那也可以看成一个特殊的指针)!!!!

int main()
{
int arr[5] = { 1,2,3,4,5 };
int(p)[5] = &arr;//这次我们新加入的条件int q = arr;//上一个条件
printf("%d\n", *arr);//1
printf("%d\n", *q);//1 这两个都知道是首元素
printf("%d\n", arr); //首元素地址
printf("%d\n", q);//q相当于arr了 也是首元素地址
printf("%d\n", *p);//*p就是arr
printf("%d\n", &arr);//整个元素的地址但是arr数值上是首元素地址
printf("%d\n", p);//这个p也是整个数组的地址
printf("%d\n", p+1);
printf("%d\n", &arr+1);//这些与上面差了20位
printf("%d\n", arr+1);//这样就比较直观的看出 这只是差了4位
/
//得出不太恰当但好用的结论
//p=&arr *p=arr=q
printf("%d\n", *arr);
printf("%d\n", *q);
printf("%d\n", *(p));printf("%d\n",( *(&arr)));
//这四个结果都是1
printf("%d\n", *(arr+1));
printf("%d\n", *(*p+1));
printf("%d\n", *(q+1));
printf("%d\n", ((&arr)+1));
//这四个都是2
return 0;
}

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

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

相关文章

二十三种设计模式第二十篇--备忘录模式

备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备…

2、Tomcat介绍(下)

组件分类 在Apache Tomcat中&#xff0c;有几个顶级组件&#xff0c;它们是Tomcat的核心组件&#xff0c;负责整个服务器的运行和管理。这些顶级组件包括&#xff1a; Server(服务器)&#xff1a;Tomcat的server.xml配置文件中的<Server>元素代表整个Tomcat服务器实例。每…

【MySQL】模具更新方案

系列文章 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类&#xff08;推荐阅读&#xff0…

【C++】STL——vector的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

文章目录 1.模拟实现vector1.1构造函数1.2迭代器1.3运算符重载1.4扩容函数1.5增删查改 1.模拟实现vector vector使用文章 1.1构造函数 析构函数 在C中&#xff0c;vector是一个动态数组容器&#xff0c;可以根据需要自动调整大小。vector类提供了几个不同的构造函数来创建和初…

深度学习笔记-暂退法(Drop out)

背景 在机器学习的模型中&#xff0c;如果模型的参数太多&#xff0c;而训练样本又太少&#xff0c;训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题&#xff0c;过拟合具体表现在&#xff1a;模型在训练数据上损失函数较小&#xff0c;预…

【Python目标识别】Labelimg标记深度学习(YOLO)样本

人工智能、ai、深度学习已经火了很长一段时间了&#xff0c;但是还有很多小伙伴没有接触到这个行业&#xff0c;但大家应该多多少少听过&#xff0c;网上有些兼职就是拿电脑拉拉框、数据标注啥的&#xff0c;其实这就是在标记样本&#xff0c;供计算机去学习。所以今天跟大家分…

哈工大计算机网络课程网络安全基本原理之:身份认证

哈工大计算机网络课程网络安全基本原理之&#xff1a;身份认证 在日常生活中&#xff0c;在很多场景下我们都需要对当前身份做认证&#xff0c;比如使用密码、人脸识别、指纹识别等&#xff0c;这些都是身份认证的常用方式。本节介绍的身份认证&#xff0c;是在计算机网络安全…

分享一个 VUE 侧边导航共用组建

项目效果图&#xff1a; 项目描述&#xff1a;加载组建时&#xff0c;隐藏&#xff0c;鼠标滑动到指定区域的时候该菜单选中高亮&#xff0c;点击菜单跳转到指定模块&#xff0c;每个页面都适用。 html 部分&#xff1a; 提示&#xff1a;我这里有英文所以有$i18n.localezh…

用Rust生成Ant-Design Table Columns | 京东云技术团队

经常开发表格&#xff0c;是不是已经被手写Ant-Design Table的Columns整烦了&#xff1f; 尤其是ToB项目&#xff0c;表格经常动不动就几十列。每次照着后端给的接口文档一个个配置&#xff0c;太头疼了&#xff0c;主要是有时还会粘错就尴尬了。 那有没有办法能自动生成colu…

【CDC】跨时钟域处理方法总结一

文章目录 一、概述1.异步时序2.亚稳态与建立保持时间 二、跨时钟域处理1.控制信号的跨时钟域处理&#xff08;单bit数据&#xff09;a.慢时钟域到快时钟域b.快时钟域到慢时钟域握手“扩宽”快时钟域脉冲时钟停止法窄脉冲捕捉电路 2.数据信号的跨时钟域处理&#xff08;多bit数据…

Could not locate supplied template: react+ts搭建

1. reactts创建 我们在是用下create-react-app之前要下载一下 npm install create-react-app -g使用一下命令创建ts的react框架 create-react-app my-app --scripts-versionreact-scripts-ts 2. 遇见问题 我们用以上创建之后会提示一段代码选择“Y”之后发现我们创建的项目…

目标检测任务中常用的数据集格式(voc、coco、yolo)

一、Pascal VOC VOC数据集(Annotation的格式是xmI) Pascal VOC数据集是目标检测的常用的大规模数据集之一&#xff0c;从05年到12年都会举办比赛&#xff0c;比赛任务task&#xff1a; 分类Classification目标检测Object Detection语义分割Class Segmentation实例分割Object…

基于PHP校园疫情防控信息管理系统-计算机毕设 附源码12057

PHP校园疫情防控信息管理系统 摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&…

ES6及以上新特性

ES6&#xff08;ECMAScript 2015&#xff09;及以上版本引入了许多新特性&#xff0c;每个版本都有不同的增强和改进。以下是 ES6 及以上版本的新特性的详细描述&#xff1a; ES6&#xff08;ECMAScript 2015&#xff09;&#xff1a; let 和 const 声明&#xff1a;引入块级作…

【嵌入式学习笔记】嵌入式入门2——中断(外部中断)

1.什么是中断 打断CPU执行正常的程序&#xff0c;转而处理紧急程序&#xff0c;然后返回原暂停的程序继续运行&#xff0c;就叫中断 1.1.中断的作用与意义 作用1&#xff1a;实时控制在确定时间内对相应事件作出响应——定时器中断作用2&#xff1a;故障处理检测到故障&…

Makefile模板和工程模板(消息队列和共享内存)的使用

一、 Makefile模板 #指定生成的文件名 OJB_OUT test#指定每一个c文件对应的.o文件 OBJS a.o b.o main.o#指定编译器 CC gcc#指定需要的库 ULDFLAGS ########################################### #以下的内容不需要修改 ########################################### all:…

NASA和uAvionix在AAM测试场部署SkyLine C2指挥和控制服务

蒙大拿州比格福克和弗吉尼亚州汉普顿2023年07月28日——美国宇航局和uAvionix签署了一项太空法案协议&#xff0c;为城市环境中的无人机系统 (UAS)开发先进的超视距(BVLOS)指挥和控制(C2)技术。根据协议&#xff0c;NASA将与uAvionix合作&#xff0c;利用基于互联网的基础设施和…

(二)Spring WeFlux响应式编程第二种整合方案|道法术器

Spring WebFlux 响应式异步编程|道法术器(一) Spring WeFlux响应式编程整合另一种方案|道法术器(二) R2dbc操作mysql 注意下面红色部分与上一篇"Spring WebFlux 响应式异步编程|道法术器(一)" 不一样的依赖包 技术整合: <!--设置spring-boot依赖的版本 --> &l…

kafka部署

1.kafka安装部署 1.1 kafaka下载 https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz Binary downloads是指预编译的软件包,可供直接下载和安装,无需手动编译。在计算机领域中,二进制下载通常指预构建的软件分发包,可以直接安装在系统上并使用 "2.…

麒麟-飞腾Kylin-V4桌面arm64系统静态编译QT

1.系统具体版本&#xff1a; 2. 因为此版本的源很老了&#xff0c;需要修改版本的源&#xff0c;才能正常更新各种软件&#xff0c;否则&#xff0c;你连麒麟商店都打不开。 sudo vi /etc/apt/sources.list 选择你系统对应版本的源地址&#xff1a; #4.0.2桌面版本: deb ht…