【C语言】指针小结

一、指针是什么?

可以通过运算符&来取得变量实际保存的起始地址

(这个地址是虚拟地址,并不是真正物理内存上的地址。)

**数据类型 *标识符 = &变量;**

**int pa = &a; int pa = NULL;

(NULL表示地址为0的内存空间,这个地址是无法使用的,读写该地址会报错**)**

pa 中存储的就是变量 a 的地址,也叫做指向 a 的指针。

*int a,b; 等价于 int *a;int b;而不等价于 int a; int b;

二、指针的运算

指针仅在同一段内存中比较才有意义。指针本质上就是一个无符号整数,代表了内存地址。它可以进行运算,但是规则并不是整数运算的规则。

  1. 指针与整数值的加减运算
    指针与整数值的运算,表示指针的移动。

    int* i;
    i = (int *)0x0034;
    i = i + 1; // 0x0038
    

    i是一个指针,指向内存地址0x0034, 不要误认为i + 1等于0x0035,正确答案是0x0038(也就是sizeof(int)的大小 )。

    原因是i + 1表示指针向内存地址的高位移动一个单位,而一个单位的short类型占据两个字节的宽度,所以相当于向高位移动两个字节。

    同样的,i - 1得到的结果是0x0032。指针移动的单位,与指针指向的数据类型有关。数据类型占据多少个字节,每单位就移动多少个字节。

  2. 指针与指针的加法运算

    两个指针进行加法是非法的。

  3. 指针与指针的减法
    相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位。
    高位地址减去低位地址,返回的是正值;低位地址减去高位地址,返回的是负值。
    这时,减法返回的值属于ptrdiff_t类型,这是一个带符号的整数类型别名,具体类型根据系统不同而不同。这个类型的原型定义在头文件stddef.h里面。

    int* i1;
    int* i2;i1 = (int *)0x0034;
    i2 = (int *)0x0038; // i2 与 i1之间相差4个字节,就是一个int的距离ptrdiff_t dist = i2 - i1;
    printf("%td\n", dist);  // 1
    
  4. 指针与指针的比较运算
    指针之间的比较运算,比较的是各自的内存地址哪一个更大,返回值是整数1(true)或0(false)。

三、多级指针

这里的 03 号格子就叫二级指针,05 号格子就叫指针,而 07 号就是我们平常用的变量。

不管几级指针有两个最核心的东西:

  • 指针本身也是一个变量,需要内存去存储,指针也有自己的地址
  • 指针内存存储的是它所指向变量的地址

这就是我为什么多级指针是逻辑上的概念,实际上一块内存要么放实际内容,要么放其它变量地址,就这么简单。

怎么去解读int **a这种表达呢?

int ** a 可以把它分为两部分看,即int**a,后面 *a 中的*表示 a 是一个指针变量,前面的 int* 表示指针变量a

只能存放 int* 型变量的地址。

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

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

相关文章

(15)微信自动化测试-针对微信主窗体的行为控制

应一位药厂的朋友咨询,他说他想知道如何实现下面的功能,都是针对微信主窗体的一些控制!今天我就给他解惑并安排! 微信主窗体是否当前处于最小化。微信主窗体是否隐藏到了系统托盘。最小化微信主窗体。最大化微信主窗体。微信主窗…

媒体捕捉-拍照

引言 在项目开发中,从媒体库中选择图片或使用相机拍摄图片是一个极为普遍的需求。通常,我们使用UIImagePickerController来实现单张图片选择或启动相机拍照。整个拍照过程由UIImagePickerController内部实现,无需我们关心细节,只…

了解近20年临床检验结果互认的推动-九五小庞

检验结果互认的政策沿革 新冠核酸检测可以说是第一个全国范围内,各医疗机构之间的结果互认项目,也是ICL对于检验结果互认的一个实践。我们对于检验结果互认早在2000年,就已经引起了国家层面的重视,并且联合多部委发布了相关指导意…

docker容器化部署及数据持久化

1、加载MySQL 5.7的镜像 docker load -i mysql-5.7.tar.gz 2、执⾏命令启动MySQL容器: sh start-mysql.sh docker run -itd \ --name mysql \ --restart always \ -p 30036:3306 \ -v $PWD/mysql/config-file.cnf:/etc/mysql/conf.d/config-file.cnf \ -v $PWD/m…

【竞技宝】DOTA2:二号位地位发生变化 圣斧、血棘助法核重回巅峰!

北京时间2024年1月5日,目前国服已经更新7.35b版本一段时间了,在这段时间里,各位看官是否感受到了比赛节奏和英雄胜率方面的变化呢?从全分段的出场率以及胜率的变化来看,二号位在游戏内的地位已经发生了很大的变化。 在…

小兔鲜儿 uniapp - SKU 模块

目录 存货单位(SKU)​ 插件市场​ 下载 SKU 插件​ 使用 SKU 插件​ 插件类型问题​ 核心业务​ 渲染商品规格​ 打开弹窗交互​ 渲染被选中的值​ 存货单位(SKU)​ SKU 概念 存货单位(Stock Keeping Unit&a…

论Acrel-2000MG微电网能量管理系统在储能行业的应用-安科瑞 蒋静

一、概述: 在新型电力系统中新能源装机容量逐年提高,但是新能源比如光伏发电、风力发电是不稳定的能源,所以要维持电网稳定,促进新能源发电的消纳,储能将成为至关重要的一环,是分布式光伏、风电等新能源消纳以及电网安…

年终总结——平凡又不平凡的2023

前言 总结不知道该如何写起,也不知该如何建立这一篇文章的大致框架,只知道我的2023大概也就分成两大块罢了。说起2023一整年,只能用平凡而又不平凡来形容,平凡在我依旧没有什么太突出的技术点,专业水平也一直处于龟速…

不同版本opencvsharp的依赖

结合Github和NuGet查看 Github主页 OpenCvSharp-AnyCPU(lastest Version 2.4.10.20170306) VC2013 runtime Framework OpenCvSharp3-AnyCPU(lastest Version 4.0.0.20181129) VC2015 runtime Framework OpenCvSharp4 (lastest…

【InnoDB数据存储结构】第3章节:区、段、碎片区和表空间

文章目录结构 区、段、碎片区和表空间 什么是区?什么是段?什么是碎片区?什么是表空间? 在上文 InooDB 存储行格式一文中已经大致讲述过,再来回顾一下,直接上图: 名词解释如下: 行…

Windows系统如何使用VNC远程连接Deepin桌面【内网穿透】

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

463岛屿周长

题目 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个…

Linux第15步_安装FTP客户端

安装完FTP服务器后,还需要安装FTP客户端,才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中,找到“FileZilla_3.51.0_win64-setup.exe”,双击它,就可以安装。 2、点击“I …

云计算历年题整理

第一大题纯计算 第一大题4或n个xx(只答若干个短语) 第一大题AWS描述名词 第二大题CUDA代码 第二大题描述名词(很多和第一大题一样与AWS有关但是比第一大题难) 第二大题计算 第三大题Map/Reduce项目涉及代码 下列Map/Reduce伪代码…

pygame学习(二)——绘制线条、圆、矩形等图案

导语 pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模…

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上,因此长期以来都存在一个难题:精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…

Time-series forecasting with deep learning: a survey

人们开发了许多深度学习架构来适应不同领域的时间序列数据集的多样性。在本文中,我们调查了一步前进和多水平时间序列预测中使用的常见编码器和解码器设计,描述了如何将时间信息纳入每个模型的预测中。接下来,我们重点介绍混合深度学习模型的…

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义 流程图 流程图中各种图形的含义及用法解析 连接线符号 连接各要素,表示流程的顺序或过程的方向。 批注符号 批注或说明,也可以做条件叙述。 子流程 流程中一部分图形的逻辑…

MySQL 8.0 开关 Redo Logging

一 前言 前几天有客户测试使用云数据库的时候提出 要禁止mydumper 关闭redo log的操作 (说白了就是导入数据时保持MySQL 实例的redo logging功能), 这才想起 在 MySQL 8.0.21 版本中,开启了一个新特性 “Redo Logging 动态开关”。 在新实例导数据的场…