指针数组和数组指针的理解(个人理解版)

news2024/11/30 14:37:04

指针数组和数组指针的形式

int *p[3]   	// 指针数组
int (*p)[3] 	// 数组指针

指针数组和数组指针的理解

1.指针数组 int *p[3]

首先找到变量p,
(1)先与[]结合看(因为[]优先级比*高),也就是p[3],它是一个大小为3的数组;
(2)再向前看有一个*,说明这个p数组保存的是指针,且3个元素都是指针;(指针数组因此而得名)
(3)再结合int,说明每个元素的指针指向的是int类型的整数。

指针数组,它肯定是一个数组,然后联想到这个数组保存的是什么呢,指针数组保存的肯定是指针,且数组的每一个元素都是指针;再联想到,每一个元素(指针)它指向的数是什么呢,看它指向的是什么类型,int *p[3] 指向的是int型,double *p[3] 指向的是double型。

画图示意:
在这里插入图片描述
实验验证:

  1. p是不是一个数组?
  2. p数组中保存的元素是不是都是指针?
  3. p数组中每个元素指向的是不是定义的类型(int、double)?
#include <iostream>
int main() {
    int a = 10;
    int b = 20;
    int c = 30;
    int* p[3] = { &a,&b,&c };  // 指针数组 验证p就是一个数组
	
	// 验证p数组中的每一个元素都是指针,这里保存的是a,b,c的地址
    std::cout << "p[0] = " << p[0] << std::endl;
    std::cout << "p[1] = " << p[1] << std::endl;
    std::cout << "p[2] = " << p[2] << std::endl;

    std::cout << "----------------------------" << std::endl;

	// 通过解引用,验证p数组的每个元素指向的内容
    std::cout << "*(p[0]) = " << *p[0] << std::endl;
    std::cout << "*(p[1]) = " << *(p[1]) << std::endl;
    std::cout << "*(p[2]) = " << *(p[2]) << std::endl;
    
    return 0;
}

输出结果:

p[0] = 000000DA7BB9FA34
p[1] = 000000DA7BB9FA54
p[2] = 000000DA7BB9FA74
----------------------------
*(p[0]) = 10
*(p[1]) = 20
*(p[2]) = 30

2. 数组指针 int (*pp)[3]

首先找到pp
(1)由于*pp被括号括起来了,优先级最高,所以pp是一个指针;
(2)向后看[],这个指针指向的是一个数组;所以叫数组指针
(3)结合int,表示这个指针指向的数组中保存的元素都是int类型的整数。

数组指针,顾名思义就是一个指针,我们就要想,既然是指针,那么它指向的是哪个地址,在这里指向的是一个数组(数组也可以理解成地址或者指针),确定完pp指向的是一个数组之后,就要思考这个数组中保存的是什么样的数据,是int型、double型、还是其他类型。在我看来,数组指针就是一个二级指针,因为是用一个指针pp来保存另一个指针地址(数组)

画图示意:
在这里插入图片描述
实验验证:

  1. pp是不是一个指针?
  2. pp怎样指向一个数组?
  3. pp指向的数组中保存的数据是什么类型?
#include <iostream>
int main() {
    int arr[3] = { 100,200,300 };
    int(*pp)[3] = &arr;         // 数组指针 这里说明pp是一个指针

	// 数组的首个元素的地址可以表示数组的地址,也可以取引用
    std::cout << "&(arr[0]) = " << &(arr[0]) << std::endl;
    std::cout << "&arr = " << &arr << std::endl;

    std::cout << "----------------------------" << std::endl;

	// 验证pp指向数组中的元素类型,通过解引用的方式
    std::cout << "*(pp) = " << *(pp) << std::endl;  // 对二级指针解引用得到数组的地址
    std::cout << "(*(pp))[0] = " << (*(pp))[0] << std::endl;  // 注意*(pp)要有括号括起来
    std::cout << "(*(pp))[1] = " << (*(pp))[1] << std::endl;
    std::cout << "(*(pp))[2] = " << (*(pp))[2] << std::endl;
    return 0;
}

输出结果:

&(arr[0]) = 000000C85519F798
&arr = 000000C85519F798
----------------------------
*(pp) = 000000C85519F798
(*(pp))[0] = 100
(*(pp))[1] = 200
(*(pp))[2] = 300

总结

  1. 指针数组,它是一个数组,数组中保存的都是指针,指针指向的是定义的类型。
  2. 数组指针,它是一个指针,指针指向的是一个数组,数组中元素的类型也是定义的类型。
  3. 数组指针可以理解成二级指针,用指针保存指针。

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

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

相关文章

2023亚太杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

抖音小程序开发:疫苗预约系统的技术实现

在疫苗接种的背景下&#xff0c;借助抖音小程序&#xff0c;可以更好地整合用户社交信息和提供便捷的疫苗预约服务。 一、疫苗预约系统的需求分析 在开发抖音小程序疫苗预约系统之前&#xff0c;首先需要进行详细的需求分析。系统应该具备用户注册、疫苗信息展示、预约功能、…

前端安全策略保障

文章目录 前言后台管理系统网络安全XSSCSRFSQL注入 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

Nerf相关、公式

在3D重建领域&#xff0c;这幅图怎么理解 这张图展示的是“体素剪枝&#xff08;Voxel Pruning&#xff09;”在3D重建中的应用&#xff0c;这是一种利用稀疏性&#xff08;Sparsity&#xff09;来优化3D数据存储和处理的技术。体素剪枝的目的是为了降低存储需求和提高计算效率…

前端界面网页截图(干货)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 看了一些谷歌插件&#xff0c;可以对网页进行局部截图或者是整个网页截图&#xff0c;于是想着弄个demo,关于前端的截图。最后选择了 html2canvas 1.下载安装包 Install NPM npm install --save html2canvas或者…

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态

2023年11月 NearCon2023 活动期间&#xff0c;基于 Cosmos SDK 构建的隐私协议 Secret Network&#xff0c;宣布使用 Octopus Network 开发的 NEAR-IBC&#xff0c;于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…

大模型幻觉成应用落地难题 最新评测文心一言解决幻觉能力最好文心一言解决幻觉能力最好 或成产业应用首选

“林黛玉倒拔垂杨柳”、“月球上面有桂树”、“宋江字武松”……相信经常使用大语言模型都会遇到这样“一本正经胡说八道”的情况。这其实是大模型的“幻觉”问题&#xff0c;是大模型行业落地的核心挑战之一。例如幻觉会影响生成内容的可靠性&#xff0c;对于法律、金融、医疗…

通用人工智能:迈向智能革命的下一步

原创 | 文 BFT机器人 AGI&#xff0c;全称为Artificial General Intelligence&#xff0c;中文翻译为“通用人工智能”&#xff0c;亦被称作强AI&#xff0c;是人工智能研究领域长期探讨的重要议题。此概念指的是在人类可能涉及的所有专业领域内&#xff0c;具备与人类智慧相当…

搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案

Varjo 的人眼分辨率混合现实和虚拟现实头显将医疗专业人员的注意力和情感投入提升到更高水平。借助逼真的 XR/VR&#xff0c;医疗和保健人员可以为最具挑战性的现实场景做好准备&#xff01; 在虚拟、增强和混合现实中进行最高水平的训练和表现 以逼真的 3D 方式可视化医疗数据…

如何将本地Portainer管理界面结合cpolar内网穿透工具实现远程浏览器访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

时间同步时钟小课堂——常用的对时方式有哪些?

目前常用的对时信号有NTP 网口、B码、串口、脉冲等授时方式&#xff0c;分别介绍如下 1、NTP授时&#xff1a; 是基于NTP 协议实现网络授时的。NTP网络时钟同步协议是目前国际互联网通用的时间服务协议。NTP 协议采用 client/Server架构&#xff0c;基于 UDP/IP&#xff0c;使用…

js构造函数之工厂模式(学习笔记1)

目录 一、简单工厂 1、存储一个用户信息 2、存储N个用户信息 3、存储N个用户信息不同年龄用户有不同美食的搭配方案【简单工厂模式】 二、抽象工厂模式 1、抽象工厂(AbstractFactory) 2、具体工厂&#xff08;ConcreteFactory&#xff09; 3、生产新款手机 4、总结 本…

No matching version found for zr-map-ol@1.1.19.

问题描述&#xff1a; 通常情况下直接安装可能还会报错&#xff0c;因为有的依赖包是在私库里的 解决方法&#xff1a; 1.查看模块的注册信息 2. 安装 如果上面这种方式安装之后npm i还是报错&#xff0c;试试下面这种方式(我没有试下面的方式 上面的已经解决掉了) 具体可以参…

医疗器械展示预约小程序的效果如何

医疗器械行业涵盖的内容非常广&#xff0c;市场中大小从业的品牌/门店也很多&#xff0c;比如我们常见的轮椅、康复器械、拐杖、血压仪等产品市场需求都非常高&#xff0c;当然还有医院里用的器械等。 医疗器械市场呈现多品牌、多门店的发展趋势&#xff0c;虽然这些东西不是必…

Rust开发——使用rust实现Redis中hset

一、Redis中hset HSET 是 Redis 中用于在哈希数据结构中设置指定字段的值的命令。哈希是一种类似于字典或映射的数据结构&#xff0c;它存储了键值对的集合&#xff0c;其中每个键都包含多个字段和与这些字段相关联的值。 哈希表在 Redis 中以键值对形式存储&#xff0c;并通…

macos 配置ndk环境

选择Android Studio下默认的ndk环境 mac电脑的ndk默认路径一般是 /Users/user_name/Library/Android/sdk/ndk/version_code 其中user_name为自己电脑的用户名&#xff0c;version_code为自己ndk安装的版本号&#xff0c;比如我这里电脑的ndk路径就是 /Users/zhangsan/Libra…

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

文章目录 先看本次实现的最终效果前言素材一、绘制路径点和连线1. 新建Waypoint &#xff0c;绘制路径点和连线2. 绘制路径点按钮效果3. 显示路径顺序文本4. 实时修改路径点位置 二、生成敌人1. 固定生成敌人配置2. 随机生成敌人配置 三、对象池创造敌人四、控制敌人沿前面绘制…

计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法

7.计算属性 7-1计算属性-有缓存 模板中的表达式虽然很方便,但是只能做简单的逻辑操作,如果在模版中写太多的js逻辑,会使得模板过于臃肿,不利于维护,因此我们推荐使用计算属性来解决复杂的逻辑 <!DOCTYPE html> <html lang"en"> <head><meta …

DP4306F—Sub-1G无线收发通信芯片

DP4306F是一款高性能低功耗的单片集成收发机&#xff0c;工作频率可覆盖200MHz~1000MHz&#xff0c;集成M0核MCU&#xff0c;支持230 / 408 / 433 / 470 / 868 / 915频段。该芯片集成了射频接收器、射频发射器、频 率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以…

spark性能调优 | 默认并行度

Spark Sql默认并行度 看官网&#xff0c;默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数&#xff0c;不要使基数) 拓展 在本地 task需要自己设置&a…