C语言详解:数组指针

数组指针是指针

int* p[10]  这是指针数组的写法 ,因为【】的优先级比*高,

所以为了解决优先级问题,加()

int(* p)[10]=&arr;//数组的地址要存起来

说明p是指针(首先与*结合),指向的类型是int[10],指向的是数组

int  main()
{int* p = NULL;//p是整形指针-指向整形的指针-可以存放整形的地址char* pc = NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址//数组指针-指向数组的指针-可以存放数组的地址int arr[10] = { 0 };//arr -首元素地址//&arr[0]-首元素地址//&arr-数组的地址  刚好可以用数组指针存放int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int(* p)[10]=&arr;//数组的地址要存起来return 0;
}

下面的代码如何理解呢? 

int main()
{char* arr[5];char(*pa)[5] = &arr;//错了char* (*pa)[5] = &arr;//正确
}

解释一下,arr是指针数组,五个元素是指针,&arr之后,拿到的是数组的地址,所以要用指针数组,但是数组的类型是什么呢?是char*,为啥呢,比如int arr【5】,arr 5个元素是int 型,而我arr的元素是char*的类型。

指针数组改怎么用呢?

在一维数组的用法,代码如下,可以看到用起来很复杂啊,解释一下,*pa=arr;就是首元素地址,首元素地址加i就拿到各个地址,然后解引用,也可以按数组的表示来

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int(*pa)[10] = &arr;int i = 0;for (i = 0; i < 10; i++){/*printf("%d ", (*pa)[i]);*///printf("\n");printf("%d ", *(*pa + i));}return 0;
}

对比一下:直接用指针写的话,可以看出代码简单很多,所以二维数组的使用一般用于二维数组以上才OK

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int i = 0;for(i=0;i<10;i++){printf("%d ", *(p + i));}return 0;
}

我们之前学过为二维数组的打印,下面代码就是最基本的方法,下面我们要用二维数组进行打印 

void print1(int arr[3][5], int x, int y)
{int i = 0;int j = 0;for (i = 0; i < x; i++){for (j = 0; j < y; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main()
{int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };print1(arr, 3, 5);return 0;
}

arr是数组名,即首元素地址,我们知道,二维数组可以看成一维数组,所以二维数组的首元素地址不是第一行第一列的元素的地址,而是第一行元素的地址。也就是一个一维数组的地址,,对于一个数组的地址,我们可以用指针数组来指向。

void print2(int(*p)[5], int x, int y)
{int i = 0;for (i = 0; i < x; i++){int j = 0;for (j = 0; j < y; j++){printf("%d ", *(*(p + i) + j));}printf("\n");}
}
int main()
{int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };print2(arr, 3, 5);return 0;
}

*(p+i)就可以拿到每一行的地址,每一行的地址再加j,就可以得到每一个元素的地址。再解引用。当然也可以用数组的表示方法来

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

可以参考一下一维数组的方式来理解。其实表示方式还是有很多种的,

arr[i]==*(arr+i)==*(p+i)==p[i]

自己可以在琢磨一下, 

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

最后,解释一下 int(*parr3[10])[5] 代表什么意思。

parr3首先与【】结合,说明是数组,数组的类型是int(*)【5】,就是我们本节学的指针数组,

说明该数组有10个元素,每个元素是一个数组指针,该数组指针指向的数组右5个元素,每个元素的类型是int 型。

画图解释一下:

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

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

相关文章

哈希表法快速求解最长连续序列 | 力扣128题详细解析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

关于电源3(整流滤波电路)

整流滤波电路 框图 一共有四种整流电路 以下是自己参考别人的文章https://blog.csdn.net/zhuguanlin121/article/details/130653498?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171582622316800215096518%2522%252C%2522scm%2522%253A%252220140713.130102334…

jenkins配置不同版本nodeJS,保姆级叫你配置

问题描述&#xff1a;公司jenkins被改了nodejs版本适配其他项目导致以前的项目构建失败&#xff0c;原因就是nodejs版本太高或太低导致&#xff0c;这里教大家不去更改服务器默认版本&#xff0c;当需要特殊版本直接在jenkins里配置即可。 过程 1、安装nodeJS插件 1.1点击管…

怎么把照片变小做头像?多种方法教你图片改尺寸

现在在社交媒体平台或者是社交软件上&#xff0c;我们经常会去更改头像来展示自己&#xff0c;但是有时候我们拍摄的照片太大无法直接用作头像&#xff0c;这时候就需要去修改图片尺寸&#xff0c;将图片改大小到合适的数值才能使用&#xff0c;那么如何快速的将图片改大小呢&a…

Ansys Mechanical|中远程点的Behavior该如何设置?

Remote point是ANSYS mechanical中的一种常见节点自由度耦合建模形式&#xff0c;在转动装配体中的连接转动副、或者在施加远端约束及远端载荷的时候&#xff0c;我们经常用到远端单元来耦合一个面或者一条线。例如销轴似的滚动摩擦连接&#xff0c;如果我们希望将两个物体通过…

小白git

克隆 &#xff1a;git clone 链接地址 如果没有.git文件的话&#xff1a;git init 切换分支&#xff1a;cd 目录 拉代码&#xff1a;git pull 查看你自己改了那些文件&#xff1a;git status 添加道本地暂存区&#xff1a;git add * 提交到远端&#xff1a;git commit …

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.9-2.10

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.9 学习率衰减(Learning rate decay) 第二门…

HP5V80、HP5V105、HP3V28电比例驱动柱塞泵放大器

HP5V80、HP5V105、HP3V28、HP3V45、HP3V60、HP3V80、HP3V125、HP3V140带电比例控制泵放大器&#xff0c;变排量泵的排量可通过由BEUEC比例放大器输出到比例电磁阀电流变化而进行调整&#xff0c;控制电流范围为300mA至800mA(24VDC)或600mA至1600mA(12VDC)。主要适合应用于工程机…

【联通官网及APP注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

「AI模型瘦身术」——知识蒸馏技术综述

使用KD原因 遇到问题&#xff1a;从产业发展的角度来看工业化将逐渐过渡到智能化&#xff0c;边缘计算逐渐兴起预示着 AI 将逐渐与小型化智能化的设备深度融合&#xff0c;这也要求模型更加的便捷、高效、轻量以适应这些设备的部署。 解决方案&#xff1a;知识蒸馏技术 知识…

Logic Pro X for Mac v11.0.0激活版:专业音频制作软件

对于音乐创作者来说&#xff0c;一个稳定、高效的工作流程至关重要。Logic Pro X for Mac提供了一系列工作流程优化功能&#xff0c;让你能够更快捷、高效地完成音乐创作。从添加音轨、录制音频&#xff0c;到混音和编曲&#xff0c;每一个步骤都如丝般顺滑。同时&#xff0c;L…

Maven 依赖排查

先从项目去看显而易见&#xff0c;假如我们有一个项目&#xff0c;父工程中包含一些子工程&#xff0c;如下&#xff1a; 我们想看一下samples-account中的依赖关系&#xff0c;那么我们可以打开 samples-account的pom文件&#xff0c;查看其maven依赖关系图。 我们可以看到此项…

ARM 交叉编译搭建SSH

一、源码下载 zlib&#xff1a;zlib-1.3.1.tar.xz openssl&#xff1a;openssl-0.9.8d.tar.gz openssh&#xff1a;openssh-4.6p1.tar.gz 二、交叉编译 1、zlib 编译参考这里 2、openssl tar -xf openssl-0.9.8d.tar.gz ./Configure --prefix/opt/ssh/openssl os/compile…

2024年抖店保证金交多少?保证金常见问题解答,一文解决你所有疑惑

大家好&#xff0c;我是电商花花 新手如果想要开抖音小店&#xff0c;有一个大坑是必须要避开的。 就是我们店铺开通之后&#xff0c;我们一定要交保证金&#xff0c;如果不交&#xff0c;那就是0元开店。 很多新手听别人说做抖音小店可以0元开店&#xff0c;不用缴纳保证金就…

开箱机选型“避坑”指南:风险识别与应对策略一网打尽

在现代化生产线上&#xff0c;开箱机作为关键设备之一&#xff0c;其选型过程的成功与否直接关系到生产效率与成本控制。然而&#xff0c;在选型过程中&#xff0c;往往会面临诸多风险&#xff0c;如何有效识别并应对这些风险&#xff0c;成为企业关注的焦点。星派将为您详细解…

JETBRAINS IDES 分享一个2099通用试用码!DataGrip 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

百度Comate插件领50京东E卡

给你分享一个AI编码助手——百度Comate&#xff01;扫码参与抽红包活动&#xff0c;520宠粉&#xff01;送京东卡&#xff01;https://url.xffjs.com/sMsP7m 流程如下 点击&#xff1a;点我传送 验证码登录账户 点击个人中心 复制License 去idea或者vscode安装插件 询问一…

【Redis】Redis 主从集群(二)

1.哨兵机制原理 1.1.三个定时任务 Sentinel 维护着三个定时任务以监测 Redis 节点及其它 Sentinel 节点的状态 1&#xff09;info 任务&#xff1a;每个 Sentinel 节点每 10 秒就会向 Redis 集群中的每个节点发送 info 命令&#xff0c;以获得最新的 Redis 拓扑结构 2&#xff…

RabbitMQ的基本组件有哪些?

RabbitMQ的基本组件有哪些&#xff1f; RabbitMQ介绍、解耦、提速、削峰、分发 详解、RabbitMQ安装 可视化界面讲解 RabbitMQ 不生产消息&#xff0c;他是消息的搬运工。 1. Producer: 消息的发布者。 2. Connection:producer/comsumer 和 Message Broker 之间的 TCP 连接。 3…

JavaGUI---JavaFX---未完结

一、Java事件处理机制的应用 JavaFX&#xff1a;JavaFX是Java平台上的一个GUI工具包&#xff0c;它提供了一些内置的事件处理机制。 Swing&#xff1a;Swing是Java平台上的另一个GUI工具包&#xff0c;它也提供了一些内置的事件处理机制。 二、JavaFX和Swing的关键区别&…