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

article/2025/9/22 4:02:31

前言:

看到标题的小伙伴可能会有点疑惑,什么是指针数组,数组指针??傻傻分不清楚,不怕,听我慢慢道来。

正文:

要想弄清楚这两个概念,我们不妨举几个例子:

1、数组:

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

这就是最简单的数组,数组中每个元素都是int类型,下面的图片帮助大家很容易理解。

数组可以将相同类型的数据整合到一起,你可以通过下标的方式或者指针的方式来访问,在这里不多赘述。

2、指针数组:

int *parr1[10]

形如以上形式的,叫做指针数组,其中:paar1先与[10]结合为parr1[10],为一个有10个元素的数组,其次再与int*结合,及每个元素的类型是int*。以下图片更方便大家理解:

 注意:指针数组,本质上parr1是数组,因为优先级的关系,parr1先与[]结合,但是接下来要介绍的数组指针正好相反。

3、数组指针

int(*parr2)[10]

在第2点已经说过,数组指针因为()的缘故,优先级很高,所以parr2先与*结合为指针,并且是指向数组的指针,后面的[10]表示指向的数组里面有10个元素,每个元素为int型。下面的图更方便大家理解:

注意:此时的parr2是一个指针,如果把指针名parr2去掉,剩余的部分就是指针类型,:int(*)[10]

 这就是数组指针,其实并没有想象的那么神秘!


4、数组指针的应用

这里为大家分享一下数组指针的几个小应用。

  • 数组指针一般 = 右侧是整个数组的地址;
  • 当数组指针指向一维数组的时候(当然基本上没人这么用),形式如下:

int(*pa)[5] = &arr

注意:

  1. 这里pa是数组指针,指向数组中有5个元素,数组元素是int型。
  2. &+数组名就是整个数组的地址,其数值上虽然与首元素地址相同,但是意义完全不一样。
  3. pa指针指向的是整个数组的地址,那么*pa(将指针解引用)取出的是整个数组的地址(也是数组首元素的地址
  4. **pa取出的是第一个元素,与*pa[0]的效果等价。

  • 当数组指针指向二维数组中时,这个用法很常见,有些书上面称这种指针为行指针,顾名思义就是操纵一行的指针,形如:
void print_arr2(int(*arr)[5], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main()
{int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };//数组名arr,表示首元素的地址//但是二维数组的首元素是二维数组的第一行//所以这里传递的arr,其实相当于第一行的地址,是一维数组的地址//可以数组指针来接收print_arr2(arr, 3, 5);return 0;
}

运行结果: 

注意:

  1. 上述代码我们定义了一个3行5列的二维数组,需要注意的是,二维数组可以不写明行,但是必须写明列,这里我们用数组指针来接收,也必须注明是5列,这是为了告诉内存第二行在哪里开始存放
  2. 我们将arr数组名传参过去,在一维数组中arr数组名代表首元素的地址但在二维数组中arr数组名代码的是第一行的地址,所以这也是行指针的由来。
  3. 形参中的int(*arr)[5]中存放的是:二维数组第一行的地址,也就是说arr代表的是第一行的地址。
  4. *arr就是二维数组第一个元素的地址,本代码也就是1的地址;**arr才找到第一个元素,即1。
  5. (arr+1)是第二行的地址,*(arr+1)是第二行首元素的地址,*(*(arr+1))是第二行首元素,即6。

结语:

想必大家看过我的blog应该对数组指针与指针数组有了初步的了解

这也是我本人第一次写blog,还请各位大佬手下留情!

最后,放一道思考题:

请问以下代码代表什么意思:

int(*parr3[10])[5]


答案就是:

  • paar3是一个数组,数组中有10个元素,每个元素的类型是:int(*)[5];
  • paar3是存放数组指针的数组。

http://chatgpt.dhexx.cn/article/mFqlTTWV.shtml

相关文章

指针数组和数组指针的区别及其详解

引言 对于指针数组和数组指针的概念&#xff0c;相信很多人经常会感到迷惑&#xff0c;见到二者一时不能分辨究竟对应哪一个才是对的。接下来我们来分析一下二者区别。 我们来看一下这个示例代码&#xff1a; int *ptr1[10]; int (*ptr2)[10];对于上述代码语句&#xff0c;你…

C语言学习—数组指针和指针数组的区别

前言 本文章对指针数组和数组指针的区别进行了分析介绍 一、数组指针和指针数组的定义 1.数组指针&#xff1a;定义 int (*p)[n]; 由于()的优先级高&#xff0c;首先说明p是一个int类型指针&#xff0c;它是指向一个整型(int)的一维数组&#xff0c;这个一维数组的长度是n&a…

指针数组和数组指针

1.什么是指针数组和数组指针 顾名思义&#xff1a;指针数组是“存放指针的数组”&#xff0c;这个变量是一个数组&#xff0c;用指针修饰&#xff0c;数组中的每个元素都是指针。 数组指针是“指向数组的指针”&#xff0c;这个变量是一个指针&#xff0c;用数组修饰&#xf…

指针数组和数组指针(非常易懂)

指针数组与数组指针 目录&#xff1a; 1.指针与一维数组 2.指针与二维数组 3.指针数组与数组指针 1.指针与一维数组 当定义一个一维数组时&#xff0c;系统会在内存中为改数组分配一个储存空间&#xff0c;其数组的变量名就是数组的首地址。若定义一个指针变量&#xff0c;并…

数组指针和指针数组

首先&#xff0c;理解一下数组指针和指针数组这两个名词&#xff1a; “数组指针”和“指针数组”&#xff0c;只要在名词中间加上“的”字&#xff0c;就知道中心了—— 数组的指针&#xff1a;是一个指针&#xff0c;什么样的指针呢&#xff1f;指向数组的指针。 指针的数…

如何下载风云卫星数据?

如何下载风云卫星数据&#xff1f; 这个是下载风云数据的网址&#xff1a; http://satellite.nsmc.org.cn/PortalSite/Data/Satellite.aspx 1.查找数据 步骤见如图1&#xff1a; 2.选择数据 选择“搜索”以后就就出现图2这个页面&#xff1a;文件名如果被省略了&#xff0…

总结部分SAR卫星及其参数以及SAR卫星发展的趋势

总结国内外失效、在轨和未来发射的SAR卫星及其参数 国内的SAR卫星及其参数 1、高分三号卫星 高分三号卫星(GF-3)于2016年8月10日成功发射&#xff0c;是我国首颗分辨率达到1米的C频段多极化合成孔径雷达(SAR)卫星&#xff0c;自然资源部为其主用户。 GF-3星的分辨率可以达到…

spot卫星介绍与数据下载

1.简介 1.1基本信息 SPOT系列卫星是法国空间研究中心&#xff08;CNES&#xff09;研制的一种地球观测卫星系统&#xff0c;已发射SPOT卫星1-7号。目前CNES已开放spot1-5的卫星数据&#xff0c;可免费下载数据的时间范围为1986年-2014年。 1.2卫星年表 名称信息SPOT-11986年…

空气污染气体卫星数据的下载教程

影响空气质量的主要气体有&#xff1a;二氧化硫、一氧化碳、二氧化氮、可吸入颗粒和臭氧等。我们可以通过Giovanni平台下载空气污染气体的卫星产品数据。 Giovanni平台介绍 Giovanni&#xff0c; 是NASA 旗下的地球科学可视化工具。通过简单的操作&#xff0c;即可将NASA 相关…

GRACE卫星介绍与解密数据下载

1 简介 1.1 基本信息 GRACE &#xff0c;Gravity Recovery and Climate Experiment&#xff0c;由 NASA 和德国宇航中心&#xff08;DLR&#xff09;联合研制&#xff0c;于 2002 年 3 月 17 日在发射。发射 时其预计寿命为 5 年&#xff0c;一直超期服役到2017年坠毁。后继卫…

风云气象卫星数据处理调研报告

风云卫星遥感数据服务平台 http://www.nsmc.org.cn/NSMC/Home/Index.html http://data.nsmc.org.cn/PortalSite/Default.aspx 风云四号气象卫星是我国第二代静止气象卫星&#xff0c;充分考虑海洋、农业、林业、水利以及环境、空间科学等领域的需求&#xff0c;以实现综合利用…

worldview卫星数据的查询方法

地理遥感生态网平台代理worldview1、worldview2、worldview3、worldview4、quickbird、geoeye、ikonos、 pleiades、spot1、spot2、spot3、spot4、spot5、spot6、spot7、landsat5(tm)、landsat(etm)、landsat8、rapideye、alos、aster、Hyperion(EO-1)、kompsat2、kompsat-3、k…

PL(Planet)卫星群遥感数据介绍及应用

1. 卫星介绍 星球实验室&#xff08;Planet Labs&#xff09;是由前美国空间局&#xff08;NASA&#xff09;科学家于2010年在旧金山成立的一家遥感卫星数据公司。该公司在世界上首次研发成功微卫星群技术&#xff0c;是世界上唯一具有全球高分辨率高频次全覆盖的遥感卫星系统…

CloudSat卫星数据下载

介绍 CloudSat标准数据产品由位于柯林斯堡的科罗拉多州立大学大气合作研究机构的CloudSat数据处理中心分发。数据产品ID以及产品名如下&#xff1a; 下载 方式1&#xff0c;交互式下载。 在官网注册&#xff0c;官网&#xff1a;http://www.cloudsat.cira.colostate.edu/o…

预处理——HJ卫星数据

&#xff08;遥感数据打开后&#xff0c;为了呈现更好的显示结果&#xff0c;都进行2%的拉伸&#xff0c;下面不再赘述&#xff09; &#xff08;一&#xff09;图像裁剪 1、打开2016年的HJ1A-CCD2卫星数据→File→Save as→Spatial Subset→选择要裁剪的东平湖区域→OK 2、…

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址&#xff1a;国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址&#xff0c;注册一个账户 2.待账户审核后&#xff0c;登录账户即可搜索并下载数据 三、相关工具下载…

葵花(Himawari)8/9卫星数据处理

李国春 葵花8&#xff08;含葵花9&#xff0c;下同&#xff09;是静止气象卫星&#xff0c;数据范围是星下点为140E赤道上空的大圆盘。空间分辨率有500m、1km和2km三种。虽然其空间分辨率不高&#xff0c;但是有极高的时间分辨率&#xff0c;观测数据刷新仅10分钟。这对一些生…

葵花卫星数据介绍与下载教程

1.数据介绍 1.1卫星介绍 葵花系列卫星是日本发射的地球同步轨道的气象卫星&#xff0c;多国将该系列卫星用于本国的天气监测和天气预报。 1.2卫星年表 目前服役的是葵花8号卫星&#xff0c;葵花9号虽然已发射&#xff0c;但是被闲置&#xff0c;预计到2022年&#xff0c;接替…

中国遥感卫星详细参数信息

中国遥感卫星详细参数信息 文章目录 **中国遥感卫星详细参数信息**01卫星命名规则02遥感卫星的分类03常见地面站标识&#xff1a;04产品级别&#xff08;形式&#xff09;&#xff1a;1) L1A&#xff1a;复数据产品(SLC) 2) L1B&#xff1a;1. 单视图像产品(SLP)2. 多视图像产品…

NPP VIIRS卫星数据介绍

VIIRS&#xff08;Visible infrared Imaging Radiometer&#xff09;可见光红外成像辐射仪。扫描式成像辐射仪&#xff0c;可收集陆地、大气、冰层和海洋在可见光和红外波段的辐射图像。他是高分辨率辐射仪AVHRR和地球观测系列中分辨率成像光谱仪MODIS系列的拓展和改进。VIIRS数…