【C语言】指针基础知识理解【续】

news2024/9/19 10:50:17

1. ⼆级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?这就是 ⼆级指针

1.1 引入二级指针

由于一级指针已经很熟悉,这里就不再赘述,这里我们重点探讨二级指针

下面先简单使用一个二级指针看看

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;

	return 0;
}

1.2 如何拆解二级指针类型

我们看到ppa的类型是 int** ,我们该如何理解指针的类型呢?

我们可以把两颗星号拆开来看

int* * ppa = &pa;

其中一颗 * 是在说明ppa是指针变量,⽽前⾯的 int* 是在说明pa指向的是整型指针(int*)类型的对象。

通过下图就更好理解:

int a = 10; 相当于向内存申请4个字节空间,这是变量a的空间,该空间对应一个内存的地址,它的地址假设为0x0012ff50,赋值为10,也就是将这个空间存放一个 10 。a的类型是整型。

int* pa = &a; 创建了一个指向整型的指针变量 pa,然后通过 &a 取出变量 a 的内存地址,取出的是第一个字节地址,也就是0x0012ff50,并将该地址赋值给指针变量 pa 。pa的类型是整型指针类型(int*)。另外指针变量也就是变量,也就是向内存申请了4个字节(32字节)或者8个字节(64位)空间,该空间对应一个内存的地.址,它的地址假设为0x0012ff48

而int** ppa = &pa; 则创建一个指向整型指针的指针变量 ppa,然后通过 &pa 取出指针变量 pa 的内存地址,取出的是第一个字节地址,也就是0x0012ff48,并将该地址赋值给指针变量 ppa 。pa的类型是整型指针的指针类型,也就是二级指针类型(int**)。

1.3 二级指针解引⽤

我们将地址保存起来,未来是要使⽤的,那怎么使⽤呢?

我们只要拿到了地址(指针),就可以使用解引用操作符(*)通过地址(指针)找到地址(指针)指向的对象。

*ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa .
 

int b = 20;
*ppa = &b;//等价于 pa = &b;

**ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a .

**ppa = 30;
//等价于*pa = 30;
//等价于a = 30;

2. 指针数组

指针数组是指针还是数组?

我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。

那指针数组呢?是存放指针的数组。

整型数组和字符数组

指针数组的每个元素都是⽤来存放地址(指针)的。

如下图:

指针数组的每个元素是地址,⼜可以指向⼀块区域。

3. 指针数组模拟⼆维数组

我们可以通过指针数组来模拟出二维数组。

 

#include <stdio.h>

int main()
{
    int arr1[] = { 1,2,3,4,5 };  // 定义并初始化第一个整数数组 arr1
    int arr2[] = { 2,3,4,5,6 };  // 定义并初始化第二个整数数组 arr2
    int arr3[] = { 3,4,5,6,7 };  // 定义并初始化第三个整数数组 arr3

    // 定义一个指针数组 parr ,其中每个元素都是指向整数的指针
    // 并分别将 arr1、arr2、arr3 的地址赋给 parr 的元素
    int* parr[3] = { arr1, arr2, arr3 };

    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)  // 外层循环控制遍历 parr 数组的元素
    {
        for (j = 0; j < 5; j++)  // 内层循环控制打印每个数组的元素
        {
            printf("%d ", parr[i][j]);  // 通过 parr[i] 可以得到对应的数组的地址,然后通过 [j] 来访问数组中的元素并打印
        }
        printf("\n");  // 换行,以便每个数组的打印结果分开显示
    }
    return 0;
}

模拟的是下图过程: 

 

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,

parr[i][j]就是整型⼀维数组中的元素。

上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀行并⾮是连续的。

 

本期博客介绍的二级指针、指针数组只是让同学们初步认识, 

后面的指针学习章节我们更加深入的学习和使用,希望这几节指针的学习,不断提高自己的内功!


 完

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

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

相关文章

机器学习之——支持向量机(SVM)技术详解

机器学习之——支持向量机&#xff08;SVM&#xff09;技术详解 1. 支持向量机的基本原理1.1 超平面1.1.1 定义与作用1.1.2 高维空间中的超平面 1.2 间隔最大化1.2.1 间隔的定义1.2.2 最大化间隔的原则 1.3 支持向量1.3.1 支持向量的定义1.3.2 支持向量的作用 2. SVM的数学基础…

Vue3 加载条(LoadingBar)

效果如下图&#xff1a;在线预览 APIs LoadingBar 参数说明类型默认值必传containerClass加载条容器的类名stringundefinedfalsecontainerStyle加载条容器的样式CSSProperties{}falseloadingBarSize加载条大小&#xff0c;单位 pxnumber2falsecolorLoading加载中颜色string‘…

快速识别音频文件转成文字

一、SenseVoice概述 阿里云通义千问开源了两款语音基座模型 SenseVoice&#xff08;用于语音识别&#xff09;和 CosyVoice&#xff08;用于语音生成&#xff09;。 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测&#xff0c;有以下特点&#xff1a; 多语言…

4000元投影仪性价比之王:爱普生TW5750极米RS10还是当贝X5S?

买投影很多人会倾向于买大品牌或者是销量最好的那几款&#xff0c;首先是大品牌售后更有保障&#xff0c;口碑和销量也间接证明了这款投影是否值得买。这几年国内投影市场中爱普生、极米、当贝这三家投影品牌无论是在产品、口碑、售后服务等方面都是最好的&#xff0c;被用户们…

深入理解 Go 数组、切片、字符串

打个广告&#xff1a;欢迎关注我的微信公众号&#xff0c;在这里您将获取更全面、更新颖的文章&#xff01; 原文链接&#xff1a;深入理解 Go 数组、切片、字符串 欢迎点赞关注 前言 为什么在一篇文章里同时介绍数组、切片、字符串&#xff0c;了解这三个数据类型底层数据结构…

【人工智能专栏】Beam Search 束搜索

Beam Search 束搜索 这里是一个 beam_size=2 的Beam Search示意图,每个节点都会扩展5个下级节点,在 Beam Search 每次都会从所有扩展节点里面挑选出2个累计启发值最大的节点,直到达到结束标准。 理念 Beam Search 是对 Greedy Search(贪心搜索)的一个改进算法,能够扩展…

windows常用的dos命令

1.打开dos命令窗口: winr -> 输入cmd -> 回车 进入之后可以看到如下界面 其中 c: 代表盘符users: 代表的是磁盘符目录下的文件夹qayrup lin 是users文件夹下的子文件夹 以上的所有构成了我们当前操作的所在位置 常用的dos命令 作用命令切换盘符盘符名: -> 回车盘…

昇思25天学习打卡营第26天|Diffusion扩散模型

看了这个diffusion扩散模型&#xff0c;不得不感慨现在AI还是很厉害的。从一张包浆的图片&#xff0c;可以还原出来图片本来的面目&#xff0c;甚至可能一张打了马赛克的图片&#xff0c;用AI处理可能也可以还原出来原始图片。攻防战在AI加入战斗后又增加了很多变数。 受限于算…

【Bug收割机】已解决使用maven插件打包成功,在控制台使用mvn命令打包失败问题详解,亲测有效!

文章目录 前言问题分析报错原因解决方法私域 前言 在maven项目中&#xff0c;大家经常会使用maven插件来打包项目文件 但是有的人也习惯使用mvn命令在控制台直接进行打包&#xff0c;因为这样可以自定义组装一些命令&#xff0c;使用起来也更加灵活方便&#xff0c;比如mvn pa…

前端开发实用的网站合集

文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont&#xff1a;阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…

Java真人版猫爪老鼠活动报名平台系统

&#x1f43e;“真人版猫爪老鼠活动报名平台系统”——趣味追逐&#xff0c;等你来战&#xff01;&#x1f42d; &#x1f431;【萌宠变主角&#xff0c;现实版趣味游戏】 厌倦了电子屏幕的虚拟游戏&#xff1f;来试试“真人版猫爪老鼠活动”吧&#xff01;在这个平台上&…

android java socket server端 可以不断的连接断开,不断的收发 TCP转发

adb.exe forward tcp:5902 tcp:5902 前面本地5901 转发到 后面设备为5902查看转发 adb forward --list删除所有转发 adb forward --remove-allpublic static final String TAG "Communicate";private static boolean isEnable;private final WebConfig webConfig;//…

jenkins流水线语法--withCredentials篇

jenkins流水线语法--withCredentials篇 &#xff08;在流水线代码中不显示明文密码&#xff09; 在jenkinsfile中进行harbor登录上传镜像时直接用的密码&#xff0c;在代码中不怎么严谨&#xff0c;也缺失安全性&#xff1b;在网上查找资料和大佬们的博客&#xff0c;得出一篇完…

一起来做几道有趣的概率题

看到一篇叫做《和上帝一起掷骰子》的文章&#xff0c;里面提到了很多概率有关的问题&#xff0c;不少经过计算得出的概率都与人第一看上去产生的直觉大相径庭。所以&#xff0c;人类的直觉往往是靠不住的。 举两个例子&#xff1a; 若1千人中有1人携带hiv病毒&#xff0c;有一种…

电脑卡了怎么办?

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中电脑卡顿是很让人心烦的问题之一。电脑卡顿不仅会影响我们的工作效率&#xff0c;还会让人感到非常烦恼。本文将详细介绍电脑卡顿的常见原因及其解决方法&#xff0c;帮助大家轻松应对这一问题…

深入浅出消息队列----【延迟消息的实现原理】

深入浅出消息队列----【延迟消息的实现原理】 粗说 RocketMQ 的设计细说 RocketMQ 的设计这样实现是否有什么问题&#xff1f; 本文仅是文章笔记&#xff0c;整理了原文章中重要的知识点、记录了个人的看法 文章来源&#xff1a;编程导航-鱼皮【yes哥深入浅出消息队列专栏】 粗…

四步教你快速解决UE5文件迁移失败❗️

本期作者&#xff1a;尼克 易知微3D引擎技术负责人 不知道大家在用UE5迁移文件时&#xff0c;有没有发现这个问题&#xff1a;如果文件输出的路径选择了非项目路径&#xff0c;那么UE会提示无法迁移。在UE4中&#xff0c;这样做是不存在问题的&#xff0c;只要选择「忽略」就可…

OS—文件系统

目录 一. 文件系统结构I/O 控制层基本文件系统文件组织模块逻辑文件系统 二. 文件系统布局文件系统在磁盘中的结构主引导记录(MasterBoot Record,MBR)引导块(boot block)超级块(super block)文件系统中空闲块的信息 文件系统在内存中的结构 三. 外存空间管理空闲表法空闲链表法…

关于CDN

CDN 代表内容分发网络&#xff08;Content Delivery Network&#xff09;它是一种通过将内容复制到多个地理位置分散的服务器上&#xff0c;从而加速网络内容传输的技术。CDN 的主要目的是提高用户访问速度、减少延迟和提升网站的可靠性。 具体来说&#xff0c;CDN 通过以下方…