第八章:指针

第八章:指针

指针重要性:

  • 数据库–>动态分配内存
  • 数据结构–>链表、队列、树、图等
  • 操作系统–>改善子程序的效率
  • 指针为函数提供修改变量值的手段

8.1-地址和指针

变量的地址
  • 计算机中,数据存储在内存中

  • 内存:是内部存储器,由存储单元组成的。内存可划分为若干存储单元,每个单元存放8位二进制数,即一个字节,其中存放的数据称为内存单元的内容。

  • 内存单元采用线性地址编码,每个单元具有唯一一个地址编码。地址编码是无符号整数型,通常用十六进制数表示。地址一旦编号后固定不变,但存储内容是动态的,经常变化。
    在这里插入图片描述

  • C编译系统对程序中定义的变量,会根据变量的数据类型为其分配一定字节数并且连续的存储空间。分配的存储单元大小以及存储的数据格式由该变量的数据类型决定。

  • C和C++决定:存储某变量内存空间的首地址称为该变量的地址

short a=3;
char b='A';
float c=2.5;系统为变量a分配了1000和1001这两个内存单元,1000是变量a的地址。变量b分配1002这个内存单元,1002是变量b的地址。变量c分配了1003、1004、1005和1006这4个内存单元,1003是变量c的地址。如果要输出变量a的值,则先要找到a在内存中的地址

在这里插入图片描述

访问方式
直接访问方式
  • 直接根据变量名存取变量的值
chort a=3;
char b='A';
float c=2.5;
间接访问方式
  • 定义指针变量,将变量的地址存放在此变量中,当要对变量进行存取时先读取该变量的值,得到要存取变量的地址,再对该变量进行访问
    在这里插入图片描述
  • 易混淆概念

变量i:变量的值和变量的地址(指针)

指针:地址

指针变量:存放地址的变量
在这里插入图片描述

8.2-指针变量

指针变量的概念
  • 专门用来存放内存单元地址的特殊变量:指针变量
  • 指针变量中存放的是另一个有值变量的地址
  • 变量的指针就是变量的地址。一个指针变量一旦存放了某个变量的地址,该指针变量就指向了这个变量。
    在这里插入图片描述
int *pointer_1,*pointer_2;   //定义指向整型数据的指针变量pointer_1, pointer_2pointer_1=&a;	  //把变量a的地址赋给指针变量pointer_1
pointer_2=&b;	 //把变量b的地址赋给指针变量pointer_2 printf("a=%d,b=%d\n",a,b);	//输出变量a和b的值
printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);//用指针变量输出变量a和b的值
指针变量的定义
  • 一般形式

    数据类型 *指针变量名[=初始地址值];数据类型是指向的变量的数据类型
    *表示其后面的变量是指针变量eg:
    int *p1,*p2;
    char *p3;
    
  • 注意:指针变量只能存放与它数据类型相同的变量的地址

int *pointer_1;
指针变量名是pointer_1,而不是*pointer_1
指针变量的赋值
  • 用变量的地址给指针变量赋值(求地址运算符&)
int a,b,*p;
p=&a;
  • 用相同类型的指针变量赋值
int a,*p1,*p2;
p1=&a;
p2=p1
  • 赋空值NULL(0)
float *p;
p=NULL
p=0;
  • 说明

NULL是一个空指针,空值指针NULL是一个不指向任何存储单元的指针,表示该指针变量的值没有意义。作用是为了避免对没有被初始化的指针变量的非法引用。

指针变量的初始化
  • 赋空值NULL
  • 用已定义的变量的地址
1.int *p1=NULL;
2.float a,*pf=&a;
指针运算与指针变量的应用
  • 基本运算
  • 算数运算
  • 关系运算
  • 赋值运算
指针基本运算规则
  • &、*优先级别相同(2级),但为右结合性(单目运算符)
  • &、*使用说明:
int a=5,*p=&a;则&*p含义:&*p-->&a,即p
则*&a含义:*&a-->*p,即a
则(*p)++含义:(*p)++ -->a++
*p++相当于*(p++),先得p所指向得变量的值,然后p+1,p不再指向a
指针的算术运算:指针增量的概念
  • 指针增量:指针变量是做++、–、+、-等运算,指针增量的运算不是单纯的算术运算,而是地址按数据个数增加所指的目标变量字节数
float  a[10]={0,1,2,3,4,5,6,7,8,9};
float *p=a;此时p指向数组a的首地址,p++或p+1是p原有的值加上4个字节,若p原有地址值为2000,则p++或p+1的地址值是2004即向后移动指针变量,使其指向后一个同类型变量
  • C语言地址运算规则规定:

    • 指针加减一个整数n,计算结果仍然是一个地址量,它是以运算符的地址量为基点,前方或后方第n个数据的地址

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

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

相关文章

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合,其中每个键对应一个值。在Java中,Map接口定义了一种将键映射到值的数据结…

02|Order by与Group by优化

索引顺序依次是 : name,age,position 案例1 EXPLAIN SELECT * FROM employees WHERE name LiLei AND position dev ORDER BY age;分析: 联合索引中只是用到了name字段做等值查询[通过key_len 74可以看出因为name字段的len74],在这个基础上使用了age进…

halcon中的一维测量

一维测量 像点到点的距离,边缘对的距离等沿着一维方向的测量都属于1D测量范畴。Halocn的一维测量首先构建矩形或者扇形的ROI测量对象,然后在ROI内画出等距离的、长度与ROI宽度一致的、垂直于ROI的轮廓线(profile line)的等距线。…

VBA实现快速逆透视

实例需求:将工作表中的数据(多维度交叉),对日期进行逆透视,转换为下表的格式。 示例代码如下。 Sub UnpivotTable()Dim oSht As WorksheetDim inLastRow As Long, inLastCol As LongDim outLastRow As Long, outCol …

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析:总体流程:1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

最简单的基于 FFmpeg 的编码器 - 纯净版(不包含 libavformat)

最简单的基于 FFmpeg 的编码器 - 纯净版(不包含 libavformat) 最简单的基于 FFmpeg 的视频编码器(YUV 编码为 HEVC(H.265))正文结果工程文件下载 最简单的基于 FFmpeg 的视频编码器(YUV 编码为 …

ES坑-创建索引使用_下划线-黑马旅游搜不到

学ES的时候,星级过滤无效 找不到数据。 需要 但是我们在创建的时候使用的是keyword 通过研究发现,我们导入数据的时候应该默认的为starName 我get库时候发现有2个字段 所以通过star_name搜索因为都是空数据搜不到,而starName类型为text所以…

UE蓝图 函数调用(CallFunction)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…

使用PM2实现高效的应用监控与管理

微信搜索“好朋友乐平”关注公众号。 1. pm2 PM2 是一个流行的进程管理器,用于 Node.js 应用程序。它支持应用程序的负载均衡、自动重启、日志管理、监控以及多环境管理等功能。PM2让开发者能够以守护进程的方式运行和管理 Node.js 应用,即使在应用崩溃…

什么是负载均衡集群?

目录 1、集群是什么? 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡(基于IP端口的负载均衡) 7、七层的负载均衡(基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…

消息中间件篇之RabbitMQ-消息重复消费

一、导致重复消费的情况 1. 网络抖动。 2. 消费者挂了。 消费者消费消息后,当确认消息还没有发送到MQ时,就发生网络抖动或者消费者宕机。那当消费者恢复后,由于MQ没有收到消息,而且消费者有重试机制,消费者就会再一次消…

【Java程序设计】【C00282】基于Springboot的校园台球厅人员与设备管理系统(有论文)

基于Springboot的校园台球厅人员与设备管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园台球厅人员与设备管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xf…

政安晨:【机器学习基础】(一)—— 泛化:机器学习的目标

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 简述 泛化是机器学习中的基本概念之一。它指的是通过学习…

代码随想录刷题第41天

首先是01背包的基础理论,背包问题,即如何在有限数量的货物中选取使具有一定容量的背包中所装货物价值最大。使用动规五步曲进行分析,使用二维数组do[i][j]表示下标从0到i货物装在容量为j背包中的最大价值,dp[i][j]可由不放物品i&a…

Linux---进程间通信(下)

1、System V 共享内存 原理如下图 系统调用接口介绍 int shmget(key_t key, size_t size, int shmflg) 功能:用来创建共享内存 参数 key:这个共享内存段名字,内核用key来标识共享内存size:共享内存大小shmflg:由九个权…

Vue局部注册组件实现组件化登录注册

Vue局部注册组件实现组件化登录注册 一、效果二、代码1、index.js2、App.vue3、首页4、登录(注册同理) 一、效果 注意我这里使用了element组件 二、代码 1、index.js import Vue from vue import VueRouter from vue-router import Login from ../vie…

独立版表情包小程序完整版源码前后端源码,附带系统搭建教程

搭建要求: 1.系统要求Nginx 1.18.0PHP-7.2mysql5.6,开启 ssl,php需要安装 sg11 扩展 2.设置伪静态 location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s$1; } } location /a…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent--windows server系统

文章目录 在windows server 2016安装zabbix agent第一步:下载windows安装agent软件第二步:解压到指定目录第三步:配置zabbix-agent.win.conf第四步:zabbix-agent安装第五步:启动zabbix-agent客户端第六步:确…

冯诺依曼体系结构 计算机组成的金字塔

01 冯诺依曼体系结构:计算机组成的金字塔 学习计算机组成原理,到底是在学些什么呢?这个事儿,一两句话还真说不清楚。不过没关系,我们先从“装电脑”这个看起来没有什么技术含量的事情说起,来弄清楚计算机到…

旋转齿轮加载

效果演示 实现了一个旋转齿轮的动画效果。具体来说,页面背景为深灰色,中间有一个齿轮装置,包括四个齿轮。每个齿轮都有内部的齿轮条,整体呈现出旋转的效果。其中,齿轮2是顺时针旋转的,齿轮1、3、4是逆时针旋…