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…

Oracle 数据库 19c 选件和管理包 英文技术文档

都是英文的&#xff0c;点击链接可单独下载。点这里批量下载。 Database Options&#xff1a; 数据库选件或管理包数据表技术白皮书MultitenantData Sheet(12c)White PaperReal Application ClustersData Sheet(12c)White PaperActive Data GuardData Sheet(没找到)White Pap…

关于电源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点击管…

Linux中的nproc命令

2024年5月15日&#xff0c;周三上午 nproc 是一个在类 Unix 系统中使用的命令行实用程序&#xff0c;用于返回系统上可用的处理器核心数量。这个数字通常比物理 CPU 核心的数量要少&#xff0c;因为它可能排除了超线程核心或热插拔核心。nproc 命令读取 /proc/cpuinfo 文件来获…

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

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

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

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

TCP实现文件传输以及下载

目录 1.上传文件思路 2.下载文件思路 3.上传文件代码 4.下载文件代码 5.运行格式 1.上传文件思路 上传文件就相当于客户端发送文件 步骤&#xff1a; 创建套接字连接服务器获取文件大小循环少量多次发送关闭文件和套接字 2.下载文件思路 下载文件就相当于服务器端接收…

layui+java前端传json后端接收

项目场景&#xff1a; layui前端使用复选框选择Table的数据传到java后端进行业务操作 问题描述 报错类型错误JSON转换接收失败的类型错误 解决方案&#xff1a; 分为前后端两种情况 先说前端的: 前端需要是集合转json下面是代码案例 主界面的table选择之后通过缓存传到子界…

JavaScript 实现敏感信息脱敏

JavaScript 实现敏感信息脱敏 银行卡号脱敏 要在 JavaScript 中对银行卡信息进行脱敏&#xff0c;可以使用字符串处理方法来替换敏感信息为特定的字符。以下是一个简单的示例代码&#xff0c;将银行卡号的中间数字用 “*” 替换&#xff1a; function desensitizeCardNumber…

小白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依赖关系图。 我们可以看到此项…

Java测试框架:分享常用的Java测试框架,如JUnit, TestNG等,包括单元测试,集成测试,性能测试等

单元测试框架 JUnit JUnit简介 JUnit是一个开源的Java测试框架,用于编写和执行可重复的测试。它是Java开发人员的一个重要工具,用于进行单元测试、回归测试和模块化测试。JUnit提供了一种形式化的方式来编写测试用例,并通过这些测试用例核实代码的正确性。具有可预测的测试…

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…

android设计模式-builder模式

builder模式可以看成是链式调用&#xff0c;如&#xff0c;是builder不是那个bunder new AlertDialog.Builder(this) .setTitle("对话框") .setMessage("测试") .setIcon(R.mipmap.ic_launcher) …