c语言:指针数组

下面我们再讨论一个特殊的数组,它的元素为指针。

我们先从普通的元素为 int 类型的数组开始。

int arr1[5] = {1, 2, 3, 4, 5};

int arr2[5] = {11, 22, 33, 44, 55};

int arr3[5] = {111, 222, 333, 444, 555};

arr1arr2arr3均为 int [5] 类型的数组。

若数组名出现在表达式中,即会转换为指向首元素的指针,即 int * 类型。我们将这几个数组的首元素指针存储在另一个元素为 int * 的数组里。

int *pToArr[3];

pToArr[0] = arr1; //arr1转换为首元素指针,int[5]int*

pToArr[1] = arr2; //arr2转换为首元素指针,int[5]int*

pToArr[2] = arr3;  //arr3转换为首元素指针,int[5]int*

pToArr[0]的类型为 int* ,指向arr1的第1个元素。

pToArr[1]的类型为 int* ,指向arr2的第1个元素。

pToArr[2]的类型为 int* ,指向arr3的第1个元素。

 

pToArr的类型为 int *[3] ,是一个数组。它有3个元素,每个元素的类型为 int *

由于元素类型为指针,所有它也被称为指针数组

定义和赋值完数组后,我们使用这个指针数组来访问所有元素。

for(int i = 0 ; i < 3; i ++)

{

int **p = pToArr + i; for(int j = 0; j < 5; j++)

{

printf("%d ", *(*p + j));

}

printf("\n");

}

 

看,这段程序遍历了3个数组的元素。

不过,这段程序的类型转换和运算稍微有点多,别着急,我们下面来详细分析它。

pToArr是一个 int *[3] 类型的数组,若出现在表达式 p = pToArr + i 中,即转换为指向首元素的指针,即 int *[3] 转为 int **

p + 0 类型为 int** ,指向pToArr的第1个元素。

p + 1 类型为 int** ,指向pToArr的第2个元素。

p + 2 类型为 int** ,指向pToArr的第3个元素。 

接着,我们分析表达式 *(*p + j)


假设在 int **p = pToArr + i 中,i的值为0,那么p指向pToArr的第一个元素。

*p 表达式结果为pToArr[0],指向arr1的第一个元素。

表达式 *p + j ,分别指向arr1中各个元素。

最后,表达式 *(*p + j) 取得arr1数组内各个元素的值。 

我们再来顺一个整个流程。

 

p ,指向 pToArr 的第一个元素,类型为 int **

*p ,指向 arr1 的第一个元素,类型为 int *

*p + j ,指向 arr1 中的第j个元素,类型为 int *

*(*p + j) ,为 arr1 中的第j个元素。

这样即可完成对 arr1 的访问,随着循环的继续,i会变为12

p会指向pToArr中的第二、第三个元素,按照上面的处理,会继续访问arr2arr3中元素的访问。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java--静态代理模式理解

什么是静态代理模式? 真实对象和代理对象都要实现同一个接口("你跟"婚庆公司"都要去做结婚这个事情) 代理对象要代理真实角色("婚庆公司"要代理"你"完成一些事情) 静态代理模式的好处? 真实对象可以专注做自己的事情("你"只…

Python列表操作详解,多种方式删除首元素

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;处理列表的操作是日常开发中不可避免的任务之一。其中&#xff0c;删除列表中的元素是一个常见的需求&#xff0c;而删除第一个元素更是一个特殊的场景。本篇博客将详细介绍Python中多种方…

理解pom.xml中的parent标签

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

mv既可以移动也可以重命名

概要&#xff1a; linux中的mv命令既可以移动文件也可以重命名文件 本篇所用系统是Ubuntu22.04 一、移动 二、重命名

软件测试工程师的职业发展方向

一、软件测试工程师大致有4个发展方向: 1 资深软件测试工程师 一般情况&#xff0c;软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。 达到这个水平比较困难&#xff0c;这需要了解很多知识&#xff0c;例如C语言&#xff0c;JAVA语言&#xff0c…

23种设计模式【创建型模式】详细介绍之【原型模式】

23种设计模式【创建型模式】详细介绍之【原型模式】 设计模式的分类和应用场景总结原型模式设计模式系列&#xff1a;深入理解原型模式&#xff08;Prototype Pattern&#xff09;什么是原型模式&#xff1f;为什么使用原型模式&#xff1f;原型模式的实现方式原型模式的代码示…

【C语言】SCU安全项目2-BufBomb

目录 关键代码解读&#xff1a; getxs() getbuf() test() 核心思路 具体操作1 具体操作2 前段时间忙于强网杯、英语4级和一些其他支线&#xff0c;有点摸不清头绪了&#xff0c;特别是qwb只有一个输出&#xff0c;太过坐牢&#xff0c;决定这个安全项目做完后就继续投身…

HarmonyOS ArkTS 中DatePicker先择时间 路由跳转并传值到其它页

效果 代码 代码里有TextTimerController 这一种例用方法较怪&#xff0c;Text ,Button Datepicker 的使用。 import router from ohos.router’则是引入路由模块。 import router from ohos.router Entry Component struct TextnewClock {textTimerController: TextTimerContr…

Potplayer播放器远程访问群晖WebDav本地资源【内网穿透】

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav 国内流媒体平台的内容…

如何下载知网论文、专利的PDF格式

知网的论文格式有其特有的格式&#xff1a;CAJ。将CAJ格式转化为Word或者PDF非常麻烦&#xff0c;且会出现乱码的情况&#xff0c;直接用知网官方的CAJ浏览器也不太方便。为此&#xff0c;困扰了许久。 其实&#xff0c;知网可以直接下载PDF格式&#xff0c;只需在浏览器上安装…

甄选的董宇辉,颠覆新东方?

董宇辉又被推向浪尖。 一年前&#xff0c;新东方老师董宇辉出现在东方甄选主播间&#xff0c;用边带货边教英文的方式爆火出圈&#xff0c;成为了东方甄选的活招牌。一年后&#xff0c;一条常规宣发物料引发一场巨大的舆情风波&#xff0c;董宇辉“小作文”事件如闹剧般展开&a…

html行内元素和块级元素的区别?

HTML中的元素可以分为两种类型&#xff1a;行内元素&#xff08;inline&#xff09;和块级元素&#xff08;block&#xff09; 文章目录 什么是行内元素什么是块级元素元素转换行内元素转块级元素块级元素转行内元素 区别总结 什么是行内元素 HTML的行内元素&#xff08;inli…

Java集合转int数组

集合通过toArray()方法进行转换为数组&#xff0c;可以转换成为指定类型的数组&#xff0c; 【但是】这些类型都必须是object类型的子类&#xff0c;基本类型不可以。 可以通过stream流处理&#xff1a; Set<Integer> set new HashSet<>(); int[] result interSet…

内网穿透工具frp安装使用

摘要&#xff1a;之前使用的 nps 目前没有维护更新了&#xff0c;和在使用的过程中做内网穿透的的网速应该有限制&#xff0c;不论云服务器带宽是多少&#xff0c;下载速度都比较慢。这里切换到 frp 试试&#xff0c;对安装和使用简单记录&#xff0c;其和 nps 有很大的操作配置…

语音识别之百度语音试用和OpenAiGPT开源Whisper使用

0.前言: 本文作者亲自使用了百度云语音识别,腾讯云,java的SpeechRecognition语言识别包 和OpenAI近期免费开源的语言识别Whisper(真香警告)介绍了常见的语言识别实现原理 1.NLP 自然语言处理(人类语言处理) 你好不同人说出来是不同的信号表示 单位k 16k16000个数字表示 1秒160…

英特尔深度相机D455实现YOLOv5+deeepsort行人车辆测速、测距、追踪

目录 1&#xff0c;YOLOv5deepsort原理简介 2&#xff0c;项目介绍 3&#xff0c;结果展示 ​编辑 Intel RealSense D435、D455等D4系列&#xff1a; Intel D4系列深度相机是由英特尔&#xff08;Intel&#xff09;公司推出的一款深度感知摄像头&#xff0c;专为实现计算机…

w3af安装(处理python2和3,pip2和3混乱的问题)

git clone --depth 1 https://github.com/andresriancho/w3af.git cd w3af ./w3af_gui报错 打开w3af_gui看一下 要求必须是python2 但我的/usr/bin/env中的python是python3 我们将/usr/bin/env中的python换成python2 which python2 #/usr/bin/python2rm /usr/bin/pythonsud…

Java 中单例模式的常见实现方式

目录 一、什么是单例模式&#xff1f; 二、单例模式有什么作用&#xff1f; 三、常见的创建单例模式的方式 1、饿汉式创建 2、懒汉式创建 3、DCL&#xff08;Double Checked Lock&#xff09;双检锁方式创建 3.1、synchronized 同步锁的基本使用 3.2、使用 DCL 中存在的疑…

真心希望所有行政人都能刷到啊

行政的姐妹在哪里啊&#xff1f;这个打工工具真的要知道哦&#xff01; 信我&#xff0c;真的好用啊&#xff01;终于不用自己写总结写材料的啊&#xff01; 这东西写啥都可以&#xff0c;只要输入需求马上就写好了啊&#xff0c;什么工作总结&#xff0c;活动策划方案&#…

如何解决苹果应用商城审核拒绝的Guideline 2.1 - Information Needed问题

当你的应用程序在苹果应用商城审核过程中被拒绝时&#xff0c;苹果会向您发送一封邮件&#xff0c;其中提供了关于拒绝原因的详细信息。本文将指导您如何正确处理Guideline 2.1 - Information Needed问题&#xff0c;并提供解决方案&#xff0c;以确保您的应用程序能够通过审核…