C语言 ——指针数组与数组指针

目录

一、二维数组

二、指针数组

(1)概念

 (2)书写方式

(3)指针数组模拟二维数组

三、数组指针

(1)概念

(2)使用数组指针打印一维数组

 (3)模拟二维数组的传参


一、二维数组

首先,我们要理解一下二维数组和指针变量之间的一些相关概念。

二维数组 :

int arr [ 3 ][ 5 ]  

和一维数组一样,在内存中是一个连续存放的,且每一个元素之前相差的字节是一致的,列如在x86的环境中,二维数组中每一个相邻的元素之间相差4个字节。

不过由于二维数组的特殊性,我们通常把二维数组打印成矩阵形式。

但又和一维数组不同,一维数组的首地址是它首元素的地址,而二维数组的首地址是首行的地址。

二维数组的每一行是一个一维数组,这个一维数组可以看做是二维数组的一个元素。

所以二维数组也可以认为是一维数组的数组。

那么 int arr[3][5] 看成一维数组那么数组名就是 arr[3]。

二、指针数组

(1)概念

首先,指针数组是一个数组,在数组中寄存的是同一类型的指针变量,或者说是地址。

就像整型数组,在整型数组内寄存的是整型的变量,字符数组在字符数组内寄存的是字符类型的变量。

 而指针变量的类型具有很多,int* 、char*、short*…………所以,指针数组也有着许多不同的类型。

 (2)书写方式

int*parr[6]:

parr 数组名

int* 表示的是数组内寄存的地址指向的元素的类型是int,而也使得这些地址的类型也便是int*

[6]表示的是指针数组的大小。

(3)指针数组模拟二维数组

 其中,arr1、arr2、arr3表示的是数组名,而数组名又表示数组首元素的地址,相当于指针。

int * 表示的是指针数组内,那些指针变量的类型。

而因为二维数组的特性,parr[ i ]可以表示为数组名。

而数组名的另一种写法 即为 *(arr+i) 其中arr表示为数组名 ,i表示为遍历。

又因为 parr[ i ] == *( parr + i )

所以parr[ i ][ j ]的另一种写法:*( *(parr+i)+ j ) 其中*(parr+i)为数组名,j为遍历

三、数组指针

(1)概念

首先要认识到,我们之前学习指针数组,指针数组是数组,是存放指针的数组。

数组指针,是指向数组的指针,存放的是数组的地址 。

例如:

int arr[10]; int(* p)[10] = &arr;

在此之前,我们先理解一下数组的地址:

通过一维数组的学习,我们得知arr表示的数组名,又表示为数组首元素的地址,而&arr表示的则是整个数组的地址。

随后,紧接着我们的指针知识,我们可以将arr用 int * 进行表示 而&arr则用 int(*)[10]表示。

而如上所示,指针变量p中存储的是整个数组的地址。

(2)使用数组指针打印一维数组

 

 (*p)[ i ] 其中(*p)可以表示为数组名,缘由是&arr = int (*p)[10]  整个数组的地址都交予了指针变量p 相当于p就是&arr 而进行换算 (*p)= (*&arr)其中的*和&是相互抵消的,所以(*p)相当于数组名。

不够以上这种写法并不推荐。

下图的写法更适合大众。

 (3)模拟二维数组的传参

假设:

int arr[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};

以上是一个二维数组,当二维数组需要进行调用传参时,我们是需要将它的行数和列数一并进行传参的。

test(arr,3,5)//传参void test (int arr[3][5],int r,int c)//传参调用

而,在使用数组指针进行模拟二维数组传参的同时,我们要明白一个知识。

二维数组的首地址是首行的地址,二维数组是由一维数组组成的。

或者可以说,二维数组的每一行,可以表示为一个一维数组的数组地址。

 随即可以演化为:

int arr0[5] = {1,2,3,4,5};int arr1[5] = {2, 3, 4, 5, 6};int arr2[5] = {3, 4, 5, 6, 7}; int arr3[] = {&arr0, &arr1, &arr2};

&arr0、&arr1、&arr2 分别表示为二维数组arr[ 3 ][ 5 ] 中的每一行的数组地址。

而我们又知道,二维数组arr[ 3 ][ 5 ] 其中arr[ 3 ]相当于一个数组名。

所以,传参调用可以写为:

void test ( int(*arr)[ 5 ], int r, int c )//传参调用

(* arr )[ 5 ] 相当于不久之前的(*p)[ i ],将二维数组的每一行当作一个一维数组,,而arr和p都为整个一维数组的地址,则二者的意思相同。

而不同的是,(* arr )表示的是第一行的地址,在进行打印时需要在内部加上遍历以至于抵达第二行第三行的地址。

所以,*(arr+i) 表示的是数组名,表示arr[ i ][ j ] 中的 arr[ i ] 

而在http://t.csdn.cn/c6Q6H中,我们得知了一种写法,arr[ i ] 可以写为*(arr+i)其中arr表示为数组名。

因此带入到本次模拟中,arr[ i ][ j ]我们可以写为 *(*(arr+i)+ j ) 其中的*(arr+i)和arr[ i ]是数组名。

最后本次二维数组的传参模拟可以写为:

 

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

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

相关文章

使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

Android APK体积优化(瘦身)

1、基础知识: 1.1 apk结构 lib :存放so文件,对应不同的cpu架构 res :资源文件,layout、drawable等,经过aapt编译 assets :资源文件,不经过aapt编译 classes.dex :dx编译…

2023年录屏软件哪个好用,Camtasia Studio2023安装激活教程最新激活密钥

2023年录屏软件哪个好用,电脑Windows10系统自带录屏不是挺香吗,干嘛还需要安装录屏软件!系统自带的录屏功能有一定局限限,想要录制其他文件、软件内容根本不好用;与其费时费力研究系统自带,不如选择好用的录…

Android FrameWork 层 Handler源码解析

Handler生产者-消费者模型 在android开发中,经常会在子线程中进行一些耗时操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。 其中:子线程、handler、主线程,其实构成了线程模型中经典的…

【JDBC系列】- 扩展提升学习

扩展提升学习 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff0…

Stephen Wolfram:让 ChatGPT 真正起作用的是什么?

What Really Lets ChatGPT Work? 让 ChatGPT 真正起作用的是什么? Human language—and the processes of thinking involved in generating it—have always seemed to represent a kind of pinnacle of complexity. And indeed it’s seemed somewhat remarkabl…

2023/8/12总结

增加了管理员功能点:(管理标签和分类) 另外加了一个转换成pdf的功能 主要是通过wkhtmltopdf实现的,之前看过很多说用adobe的还有其他但是都没成功。 然后就是在学习websocket和协同过滤算法实现,还只是初步了解了这些。…

大模型训练时间估算

文章目录 开激活重计算不开激活重计算开激活重计算 GPU利用率一般在 0.3 - 0.55 之间,假定为0.45 4090 理论性能:FP16:82.58 TFLOPS 不开激活重计算 我们来说一下系数8或6是怎么来的: 对于每个模型参数,都进行2次浮点数计算,即计算Y = AB 时,先将元素按位相乘,再按位相…

IntellIJ Idea 连接数据库-MySql

前言:可以用mariaDB工具,在本地创建服务器主机和数据库,而后用intellIJ Idea尝试连接 MariaDB创建数据库练习 1.IntellIJ Idea打开界面右侧Database工具,选择MySQL数据库。 2.填写数据库账号密码,地址端口号&#xff…

应用冷启bindservice耗时

背景:sdk初始化的时候耗时过长,而sdk,init方法中只有一个bindservice及一些变量的初始化,却好事100ms 查看trace发现binderservice耗时只占init耗时的一小部分,但是init逻辑并没有其他代码。 这里servicebind返回快的另一原因是se…

RabbitMQ工作流程详解

1 生产者发送消息的流程 (1)生产者连接RabbitMQ,建立TCP连接(Connection),开启信道(Channel) (2)生产者声明一个Exchange (交换器),并设置相关属性,比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性&#xf…

每日一学——OSI参考模型

OSI参考模型(Open Systems Interconnection Reference Model)是国际标准化组织(ISO)制定的一个网络通信协议的概念框架。它将网络通信划分为七个层次,每个层次负责不同的功能和任务,从物理层到应用层依次为…

Python-OpenCV中的图像处理-模板匹配

Python-OpenCV中的图像处理-模板匹配 模板匹配单对象的模板匹配多对象的模板匹配 模板匹配 使用模板匹配可以在一幅图像中查找目标函数: cv2.matchTemplate(), cv2.minMaxLoc()模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提…

环保行业如何开发废品回收微信小程序

废品回收是近年来受到越来越多人关注的环保行动。为了推动废品回收的普及和方便,我们可以利用微信小程序进行制作,方便人们随时随地参与废品回收。 首先,我们需要注册并登录乔拓云账号,并进入后台。乔拓云是一个提供微信小程序制作…

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

centos7实现负载均衡

目录 一、基于 CentOS 7 构建 LVS-DR 集群。 1.1 配置lvs负载均衡服务 1.1.1 下载ipvsadm 1.1.2 增加vip 1.1.3 配置ipvsadm 1.2 配置rs1 1.2.1 编写测试页面 1.2.2 手工在RS端绑定VIP、添加路由 1.2.3 抑制arp响应 1.3 配置rs2 1.4 测试 二、配置nginx负载…

react学习笔记——4. 虚拟dom中处理动态数据

如下需求 方式1&#xff1a; 直接在ul中使用{data}&#xff0c;是可以遍历数据的&#xff0c;然后如果将data改成下面形式&#xff0c;也是可以实现的。但是如果data是一个对象&#xff0c;则不能便利。 const data [<li>Angular</li>, <li>React</li&g…

CSDN 直播:腾讯云大数据 ES 结合 AI 大模型与向量检索的新一代云端检索分析引擎 8月-8号 19:00-20:30

本次沙龙围绕腾讯云大数据ES产品展开&#xff0c;重点介绍了腾讯云ES自研的存算分离技术&#xff0c;以及能与AI大模型和文本搜索深度结合的高性能向量检索能力。同时&#xff0c;本次沙龙还将为我们全方位介绍腾讯云ES重磅推出的Elasticsearch Serverless服务&#xff0c;期待…

国产航顺HK32F030M: 内部参考电压

HK32F030MF4P6 用户手册 内部参考电压 adc.c #include "bsp_adc.h"/*** brief ADC GPIO 初始化* param 无* retval 无*/ static void ADCx_GPIO_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;// 打开 ADC IO端口时钟ADC_GPIO_AHBxClock_FUN ( ADC_GPIO_C…

使用go-zero快速构建微服务

本文是对 使用go-zero快速构建微服务[1]的亲手实践 编写API Gateway代码 mkdir bookstore && cd bookstorego mod init bookstore mkdir api && goctl api -o api/bookstore.api syntax "v1"info(title: "xx使用go-zero"desc: "xx用…