嵌入式初学-C语言-十九

news2024/12/27 20:15:51

指针的引入

  1. 为函数修改实参提供支持
  2. 为动态内存管理提供支持
  3. 为动态数据及结构提供支持
  4. 为内存访问提供另一种途径

指针的概述

内存地址:

系统为了内存管理的方便将内存划分为一个个内存单元(一个内存单元占一个字节),并为每一个内存单元进行了编号,内存单元的编号称为该内存单元的地址。一般情况下,我们每一个变量都是有多个内存单元构成的,所以每个变量的内存地址其实就是这个变量对应的第一个单元的地址,也叫首地址

变量指针

变量地址称为该变量的指针,变量地址往往是指变量在内存中第一个内存单元的编号(首地址)

指针变量

       存放其他变量地址的变量

指向

       指针变量存放谁的地址,就说明该指针变量指向谁

指针运算符‘*’

案例:

/**
* 指针 初识
*/
#include <stdio.h>

void main()
{

    // 定义一个普通/一般变量
    int i = 3;
    // 定义一个指针变量,并赋值
    int *i_point = &i; // 指针变量的数据类型要和存储的地址变量类型一致
    // 访问普通变量(直接访问)
    printf("直接访问-%d\n",i); // 3
    // 访问指针(地址访问)%p访问地址
    printf("地址访问-%p\n",i_point);
    // 访问指针变量(间接访问)
    printf("间接访问-%d\n",*i_point); // 3
}

指针变量的定义

语法:

       数据类型 * 变量列表

举例:

int a; // 普通变量

int *a,*b; // 指针变量

注意:

  1. 虽然定义指针变量*a,是在变量名前加*,但是实际变量名为a,而不是*a,
  2. 使用指针变量间接访问内存数据时,指针变量必须要有明确的指向
  3. 如果想借助指针变量间接访问指针变量保存的地址上的数据,可以使用指针变量前加*来直接访问;指针变量前加*;也称为对指针变量解引用
int i = 5, *p;
p = &i; // 将i的地址赋值给指针变量p
printf("%d\n",*p);// 间接访问i的值,也称为解引用p对应地址空间的值

     4. 指针变量只能指向同类型的变量,借助指针变量访问内存一次访问的内存大小是取决于指针变量的类型

     5.指针变量在定义同时可以初始化:这一点和普通变量是一样的

int i = 5;
int *p = &i; // 定义的同时初始化

指针变量的使用

指针变量的赋值:

// 方式1
int a,*p;
p = &a; // 指针变量的值是其他变量的地址
// 方式2
int a,*p,*q = &a;
p = q;

操作指针变量的值:

int a,*p,*q = &a;
p = q;
printf("%p",p); // 此时返回的是变量a的地址空间

两个有关运算符的使用:

  •  &  取地址运算符。 &a是变量a的地址。
  •  *  指针运算符 (或称“间接访问”运算符),*p是指针变量p指向的对象的值。

 案例:

指针变量做函数的参数

指针变量做函数参数往往传递的是变量的地址(首地址),借助于指针变量间接访问是可以修改实参的变量数据的

两个有关运算符的使用

& 取地址运算符。 &a是变量a的地址。

* 指针运算符 (或称“间接访问”运算符),*p是指针变量p指向的对象的值。

案例:

#include <stdio.h>
void main()
{
int a,b;
int *pointer_1, *pointer_2;
a=100; b=10;
pointer_1=&a;
pointer_2=&b;
printf("a=%d,b=%d\n",a,b);
printf("pointer_1=%d,pointer_2=%d\n",*pointer_1,*pointer_2);
}

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

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

相关文章

YARN 调度器的配置与使用

YARN 调度器的配置与使用 一、启动公平调度器1.1 配置 yarn-site.xml创建 fail-scheduler.xml 文件 二、同步配置文件三、重启启动 YARN 集群四、提交作业五、运行结果 一、启动公平调度器 公平调度器的使用由属性yarn.resourcemanager.scheduler.class的设置所决定。YARN默认…

Effective Java学习笔记第27、28条原生态类型和非受检警告

目录 什么是泛型 泛型与编译器 不要轻易使用原生态类型 可以通过通配符类型来替代原生态类型 几个适合原生态类型的场景 消除非受检的警告 什么是非受检警告 如果无法消除警告 本书27-33条主要介绍泛型。首先介绍什么是泛型&#xff0c;它的应用场景是什么。然后重点介…

微信小程序项目-宠物商城项目uniapp源码和代码讲解

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;大前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我…

3D渲染优化:视锥体剔除算法

现在我们知道如何创建场景图并在场景中组织对象&#xff0c;我们将了解如何通过技术“视锥剔除”来限制 GPU 的使用。 这种技术很容易理解。你无需将所有信息发送到 GPU&#xff0c;而是对可见和不可见元素进行排序&#xff0c;并仅渲染可见元素。借助这种技术&#xff0c;你将…

Matlab|考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第四章《考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合…

Baklib:强大的知识库创建工具

Baklib&#xff1a;强大的知识库创建工具 在信息管理和知识分享的数字化时代&#xff0c;Baklib 作为一款功能强大的知识库创建工具&#xff0c;为用户提供了全面的解决方案。本文将介绍 Baklib 的基本信息、特点&#xff0c;以及如何快速部署和使用。 软件简介 Baklib 是一款…

第二十节、有限状态机和抽象类多态

一、抽象类 挂载到动画器上的就是继承抽象类代码 1、使用onenable周期函数启用 2、在每一个周期函数中对抽象类进行调用 3、隐藏公开的变量

[Python学习日记-4] Python中的变量

[Python学习日记-4] Python中的变量 简介 变量的运行原理 变量的使用规则 简介 在Python中&#xff0c;变量是一个具有名称的存储位置&#xff0c;用于存储数据。它们被用来在程序中引用和操作数据。变量在使用前需要先进行声明或赋值&#xff0c;Python是一种动态类型语言&…

Linux应用层开发(7):网络编程

互联网对人类社会产生的巨大变革&#xff0c;大家是有目共睹的&#xff0c;它几乎改变了人类生活的方方面面。互联网通信的本质是数字通信&#xff0c;任何数字通信都离不开通信协议的制定&#xff0c;通信设备只有按照约定的、统一的方式去封装和解析信息&#xff0c;才能实现…

043字符串相乘

题意 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 1 < num1.length, num2.length < 200 难度 中…

Python Dash 一个可以玩转AI的可视化利器

很多人提到Tableau、Power BI等老牌可视化工具&#xff0c;这些工具确实引领了可视化的风潮&#xff0c;有开疆拓土之功。 但这次我要提名一个有黑马潜质的可视化工具-Dash&#xff0c;在某些地方比Tableau、PowerBI更胜一筹。 Dash是一个基于web的Python工具包&#xff0c;所…

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a; 信号处理函数 参数&#xff1a; signum&#xff1a;要处理的信号 handler&#xff1a;信号处理方式 SIG_IGN&#xff1a;忽略信号 SIG_DFL&#xff1a;执行默认操作 handler&#xff1a;捕捉信 …

mysql数据存储问题

目录 MySQL数据存储基础 MySQL数据存放位置 InnoDB存储引擎介绍 Mermaid图表&#xff1a;InnoDB存储引擎数据文件结构 表空间结构详解 组成要素 组织方式 页内组织 性能影响 Mermaid图表&#xff1a;表空间的层次化结构和页内组织 InnoDB行格式详解 行格式类型 Co…

Linux 操作系统:基于环形队列的生产者消费者模型

Linux 操作系统&#xff1a;基于环形队列的生产者消费者模型 一、前言二、大致框架二、P操作、V操作三、生产者生产数据四、生产者获取数据五、代码测试六、所有代码 一、前言 环形队列采用数组模拟&#xff0c;用模运算来模拟环状特性。和基于阻塞队列的生产者消费者模型不同的…

WPF篇(11)-ToolTip控件(提示工具)+Popup弹出窗口

ToolTip控件 ToolTip控件继承于ContentControl&#xff0c;它不能有逻辑或视觉父级&#xff0c;意思是说它不能以控件的形式实例化&#xff0c;它必须依附于某个控件。因为它的功能被设计成提示信息&#xff0c;当鼠标移动到某个控件上方时&#xff0c;悬停一会儿&#xff0c;…

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)

【云存储】SDS软件定义存储&#xff0c;数据存储的类型与技术方案&#xff08;块/文件/对象&#xff0c;Ceph、RBD等&#xff09; 文章目录 1、分布式存储架构&#xff08;软件定义存储SDS&#xff0c;超融合基础架构HCI&#xff09;2、存储类型&#xff08;块存储&#xff0c;…

SQL面试题练习 —— 用户行为路径分析

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;拼多多。 1 题目 有一张用户行为日志表 ods_usr_log, 包含用户id&#xff08;user_id&#xff09;和页面id&#xff08;page_id&#xff09;以及进入页面时间&#xff08;in_ts&#xff09; 问题&#xff1a;统计每天进入A页…

【SpringMVC】SpringMVC实现文件上传和下载

目录 1.文件上传 2.文件下载 1.文件上传 大概的图如下所示&#xff1a; 客户端&#xff1a; 文件上传就是把客户端的文件上传到服务端进行保存。在文件上传时文件和其他请求参数是在 请求体中进行传递。所以不支持 GET 类型请求。实现文件上传&#xff0c;需要提供一个上传的…

状态压缩动态规划——状压dp

状压dp&#xff1a;意思是将状态进行压缩&#xff0c;从而更容易地写出状态转移方程 通常做法&#xff1a;将每个状态&#xff08;一个集合&#xff09;用二进制表示&#xff0c;每个位的1就代表着这个编号的元素存在&#xff0c;0就代表着这个编号的元素不存在&#xff0c;如…

【Python】练习题附带答案

1、使用for循环实现输出9*9乘法表 代码&#xff1a; 2、写代码实现累乘计算器。 示例&#xff1a;用户输入&#xff1a;5*9*87输出答案&#xff1a;3915 代码&#xff1a; 3、写代码实现&#xff0c;循环提示用户输入的内容&#xff08;Q/q终止循环&#xff09;&#xff0c;…