嵌入式课程day13-C语言指针

目录

十、指针

10.1了解指针

10.2指针使用

10.2.1指针定义:

10.2.2指针读写操作:

10.2.3指针变量空间大小

10.2.4指针偏移:


十、指针

10.1了解指针

指针:是变量 ,存储地址编号的。

地址:内存按照 字节 进行编号,1个字节1个编号  4GB

一般地址编号用16进制表示  %p

空间:指针本身的空间  指针指向的空间

10.2指针使用

10.2.1指针定义:

指针类型 指针名;

指针类型:指针指向对象的类型 *        

指针定义的时候:* -- 是指针的标记

例子:

定义一个指针指向int型的空间,保存int型的地址。

 int * p;   // int *p;   int* p;

// 定义一个变量,变量名: p
定义一个指针指向double型空间,
double * q;

10.2.2指针读写操作:

练习1、定义一个指针指向int型的空间,保存int型的地址。

int a = 30;  // int型的空间  -- int型的地址 -- &a

定义一个指针指向a ,保存a的地址。

int * p;            

// 指针指向a ,保存a的地址

p = &a;    // p -- 指针本身的空间  *p --- 解地址 -- 指针指向的空间

#include<stdio.h>int main (void)
{int a = 30;int* p;p = &a;printf ("%p %p\n", p, &a);printf ("%d %d\n", *p, a);*p = 100;printf ("%d %d\n", *p, a);return 0;
}

10.2.3指针变量空间大小

4/8 个字节,   32位系统 -4个字节  64位系统 -- 8个字节  指针变量空间大小和指向对象类型没有系,

实质: 指针存地址编号的。

#include<stdio.h>int main (void)
{int* p;char* q;double* temp;int (*k)[3];printf ("%d %d %d %d\n", sizeof (p), sizeof (q), sizeof (temp), sizeof (k));  // 4 / 8printf ("%d %d %d %d\n", sizeof (*p), sizeof (*q), sizeof (*temp), sizeof (*k)); // 4 1 8 12return 0;
}

10.2.4指针偏移:

指针偏移和指针指向的对象类型有关,就以指针指向的对象类型为单位进行偏移。        

指针指向数组里面的数据进行偏移。

地址是常量 , 指针是变量,存储地址编号的。

int a[5] = { 5,78,9,100,34 };// 定义一个指针,指向数组里面的元素a[0],然后再进行偏移
int* p;// p指向a[0],保存a[0]的地址
p = a;    // p = &a[0];printf ("%p %p\n", p, p + 1);  // ----------------------------------------------------------------
char arr[] = { '2','4','5','6' };// 定义一个指针,指向数组里面的元素arr[2],然后再进行偏移
char* q;// q指向arr[2]
q = arr + 2;   // arr + 2  === &arr[2]printf ("%p %p %p\n", q - 1, q, q + 1);
#include<stdio.h>int main (void)
{int a[5] = { 5,78,9,100,34 };// 定义一个指针,指向数组里面的元素a[0],然后再进行偏移int* p;// p指向a[0],保存a[0]的地址p = a;    // p = &a[0];printf ("%p %p\n", p, p + 1);      // 偏移 - 4个字节 printf ("%p %p\n", &a[0], &a[0] + 1);char arr[] = { '2','4','5','6' };// 定义一个指针,指向数组里面的元素arr[2],然后再进行偏移char* q;// q指向arr[2]q = arr + 2;   // arr + 2  === &arr[2]printf ("%p %p %p\n", q - 1, q, q + 1);  // 偏移-- 1个字节  return 0;
}

练习:倒转数组,用指针的方式

#include<stdio.h>
main ()
{int a[] = { 10,9,8,7,6,5,4,3,2,1,0, };//定义指针指向首元素和尾元素int* first = a;int* last = &a[10];//定义中间变量用于交换int temp;//开始交换do{temp = *first;*first = *last;*last = temp;} while (++first <= --last);//输出检验int i = 0;for (i = 0; i < 11; i++){printf ("%d ", a[i]);}return 0;
}

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

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

相关文章

解决vue3+ts打包项目时会生成map文件

在正常未配置的情况下使用npm run build 命令打包&#xff0c;会生成很多的js和map文件,map文件是为了方便我们在生产环境进行更友好的代码调试&#xff0c;但是这样就存一个安全问题&#xff1b;容易被攻击&#xff1b; 解决方法&#xff1a;在package.json文件&#xff0c;重…

MySQL:表设计

表的设计 从需求中获得类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性就对应着表中的字段&#xff08;也就是表中的列&#xff09; 表设计的三大范式&#xff1a; 在数据库设计中&#xff0c;三大范式&#xff0…

使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索

作者&#xff1a;来自 Elastic Gustavo Llermaly 使用 Azure OpenAI 服务处理你的数据&#xff0c;并使用 Elastic 作为向量数据库。 在本文中&#xff0c;我们将探索 Azure OpenAI 服务 “On Your Data”&#xff0c;使用 Elasticsearch 作为数据源。我们将使用 Elastic Shar…

chat2db调用ollama实现数据库的操作。

只试了mysql的调用。 其它的我也不用&#xff0c;本来想充钱算了。最后一看单位是美刀。就放弃了这分心。于是折腾了一下。 本地运行chat2db 及chat2db ui https://gitee.com/ooooinfo/Chat2DB clone 后运行起来 chat2db的java端&#xff0c;我现在搞不清这一个项目是有没有…

【搜狐简单AI-注册/登录安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

微服务day09

DSL查询 快速入门 GET /items/_search {"query": {"match_all": {}} } 叶子查询 GET /items/_search {"query": {"match_all": {}} }GET /items/_search {"query": {"multi_match": {"query": "脱…

Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射

“新字符设备的GPIO驱动”和“设备树下的GPIO驱动”都要用到寄存器地址&#xff0c;使用“物理内存”和“虚拟内存”映射时&#xff0c;非常不方便&#xff0c;而pinctrl和gpio子系统的GPIO驱动&#xff0c;非常简化。因此&#xff0c;要重点学习pinctrl和gpio子系统下的GPIO驱…

force stop和pm clear的区别

前言&#xff1a;因为工作中遇到force stop和pm clear进程后&#xff0c;进程不能再次挂起&#xff0c;谷歌系统共性问题&#xff0c;服务类应用经清缓存后当下服务就会挂掉&#xff0c;需要系统重启才能恢复。为了更好的“丢锅”&#xff0c;需要进一步学习force stop和pm cle…

【大数据学习 | flume】flume Sink Processors与拦截器Interceptor

1. Failover Sink Processor 故障转移处理器可以同时指定多个sink输出&#xff0c;按照优先级高低进行数据的分发&#xff0c;并具有故障转移能力。 需要修改第一台服务器agent a1.sourcesr1 a1.sinksk1 k2 a1.channelsc1 a1.sources.r1.typenetcat a1.sources.r1.bindworker…

如何从头开始构建神经网络?(附教程)

随着流行的深度学习框架的出现&#xff0c;如 TensorFlow、Keras、PyTorch 以及其他类似库&#xff0c;学习神经网络对于新手来说变得更加便捷。虽然这些框架可以让你在几分钟内解决最复杂的计算任务&#xff0c;但它们并不要求你理解背后所有需求的核心概念和直觉。如果你知道…

Conda安装与使用中的若干问题记录

Conda安装与使用中的若干问题记录 1.Anaconda 安装失败1.1.问题复述1.2.问题解决&#xff08;安装建议&#xff09; 2.虚拟环境pip install未安装至本虚拟环境2.1.问题复述2.2.问题解决 3.待补充 最近由于工作上的原因&#xff0c;要使用到Conda进行虚拟环境的管理&#xff0c;…

『OpenCV-Python』视频的读取和保存

点赞 + 关注 + 收藏 = 学会了 推荐关注 《OpenCV-Python专栏》 上一讲介绍了 OpenCV 的读取图片的方法,这一讲简单聊聊 OpenCV 读取和保存视频。 视频的来源主要有2种,一种是本地视频文件,另一种是实时视频流,比如手机和电脑的摄像头。 要读取这两种视频的方法都是一样的…

字节青训-字符串字符类型排序问题、小C点菜问题

目录 一、字符串字符类型排序问题 题目 样例 输入&#xff1a; 输出&#xff1a; 输入&#xff1a; 输出&#xff1a; 输入&#xff1a; 输出&#xff1a; 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; ​…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

任务调度工具Spring Test

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a; 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 一.…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

数据结构(单向链表——c语言实现)

链式存储的优缺点&#xff1a; 优点&#xff1a; 1、动态分配内存&#xff1a; 链式存储不需要在数据插入之前分配固定大小的数组或内存块&#xff0c;因此它更适合存储动态变化的数据 2、高效的插入和删除操作&#xff1a; 在链表中插入或删除元素只需要调整相邻节点的指…

基于Spring Boot的电子商务平台架构

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架&#xff0c;并且可以不需要配置任何的XML文件就可以&#xff0c;因为Spring Boot里面自带了很多接口&#xff0c;只需要配置不同的接口就会自动的应用并且识别需要的依赖&#xff0c;在配置方面非…

Level DB --- Block

class Block class Block是Level DB里面的重要数据结构&#xff0c;该数据结构用来承载已经存储到文件中的数据。已经被存储的数据当需要再次加载、应用&#xff08;例如搜索&#xff09;&#xff0c;这时首先要把数据加载、初始化到class Block里面。 数据的组织形式&#x…