c++数组指针和指针数组详解

指针数组:

指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。

数组指针:

数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

指针数组

首先先定义一个指针数组,既然是数组,名字就叫arr

char *arr[4] = {"hello", "world", "shannxi", "xian"};

arr[4]是一个定义的数组。把它对应到对应到内存中,arr是一个在栈区,有四个元素的数组,而每一个元素又是一个指针,所以说它的四个元素各占四个字节,所以变量arr的大小是16个字节。arr+1会跳过四个字节。也就是一个指针的大小 。

数组指针

首先来定义一个数组指针,既然是指针,名字就叫pa,要给指针加括号。

char (*pa)[4];

pa是一个指针指向一个char [4]的数组,每个数组元素是一个char类型的变量。既然pa是一个指针,存放一个数组的地址,那么在我们定义一个数组时,数组名称就是这个数组的首地址,那么这二者有什么区别和联系呢

char a[4];
数组名称和数组指针的区别

a是一个长度为4的字符数组,a是这个数组的首元素首地址。既然a是地址,pa是指向数组的指针,那么能将a赋值给pa吗?答案是不行的!因为a是数组首元素首地址,pa存放的却是数组首地址,a是char 类型,a+1,a的值会实实在在的加1,而pa是char[4]类型的,pa+1,pa则会加4,虽然数组的首地址和首元素首地址的值相同,但是两者操作不同,所以类型不匹配不能直接赋值,但是可以这样:pa = &a,pa相当与二维数组的行指针,现在它指向a[4]的地址。

char *p=a;   //p是指向数组首元素的指针

数组名和指针虽都代表数组首元素的地址,但意义不同。把它们分别比作省政府和市政府,数组名相当于省政府,指向首元素的指针代表市政府。如陕西的省政府在西安,而西安市的市政府也在西安,两个政府都在西安,但其代表的意义完全不同。
 ①用sizeof关键字求数组所占的内存是整个数组大小,指针不是。
 ②对数组名取地址时是取得一个代表整个数组的地址,对指针取地址则不然。

指针数组在参数传递时的使用

指针数组常用在主函数传参,在写主函数时,参数有两个,一个确定参数个数,一个这是指针数组用来接收每个参数(字符串)的地址
int main(int argc, char *argv[])
不能传递整个数组过去,如果数组很大,这样内存利用率很低,所以应该传递数组的首地址,用一个指针接收这个地址。因此,指针数组对应着二级指针
void fun(char **pp); //子函数中的形参
fun(char *p[]); //主函数中的实参

数组指针传参时的使用

数组指针既然是一个指针,那么就是用来接收地址,在传参时就接收数组的地址,所以数组指针对应的是二维数组

void fun(int (*P)[4]);   		//子函数中的形参,指针数组 
a[3][4] = {0};              	//主函数中定义的二维数组
fun(a);                       	//主函数调用子函数的实参,是二维数组的首元素首地址

在这里插入图片描述
sizeof(a)=12*4=48
sizeof(p)=4 //(x64系统为8)
当sizeof用于变量时返回这个变量占用的实际空间的大小。当sizeof用于数组名时,返回整个数组的大小(这里的大小指占用的字节数)。p是一个指针变量,这个变量占用四个字节。

03-10
<think>嗯,用户想获取关于GEEGoogle Earth Engine)的星系信息和资源,特别是与数据处理和遥感相关的内容。首先,我需要确认“星系”在这里的具体含义。可能用户指的是卫星数据,比如不同卫星的数据集,或者天文方面的星系数据?但结合上下文中的引用内容,GEE主要用于地球观测,比如Landsat、Sentinel等卫星数据,而不是天文星系。所以可能用户有笔误,或者想了解GEE中的卫星数据资源。 接下来,我需要参考用户提供的引用内容。引用[1]和[2]详细介绍了GEE的功能,包括其处理遥感数据的能力,支持的数据集如MODIS、Landsat、Sentinel,以及气象数据。引用[3]提到了上传矢量数据的问题,可能涉及数据处理中的常见错误。用户的问题核心应该是如何在GEE中处理这些卫星数据,以及可用的资源。 根据系统级指令,回答需要结构清晰,分步骤解决问题。首先应该介绍GEE中可用的卫星数据集,然后说明数据处理的基本流程,再给出代码示例,最后生成相关问题。同时,要确保所有数学公式和代码块格式正确,使用中文回答,并添加引用标识。 需要检查是否有遗漏的关键点,比如GEE的数据访问方式、API使用、常见问题解决(如引用[3]中的上传错误)。另外,用户提到“星系”,可能需要确认是否涉及多源数据融合或时间序列分析,这在遥感处理中是常见的应用,可以适当扩展。 最后,生成的相关问题需要围绕GEE数据处理、应用场景、技术优势等,确保问题具有针对性和延伸性,帮助用户进一步探索。</think>### GEEGoogle Earth Engine)卫星数据处理与遥感应用 #### 1. GEE支持的卫星数据集 GEE集成了超过1000个公共数据集,覆盖地球科学领域的多源遥感数据,包括: - **Landsat系列**:提供1972年至今的全球中分辨率影像,支持地表覆盖长期监测[^2]。 - **Sentinel系列**:包含高分辨率雷达(Sentinel-1)和多光谱影像(Sentinel-2),适用于精准农业和灾害监测。 - **MODIS**:每日更新的全球植被指数(NDVI)和地表温度数据,公式为: $$ \text{NDVI} = \frac{\text{NIR} - \text{Red}}{\text{NIR} + \text{Red}} $$ - **气象数据**:如NCEP再分析数据,提供温度、降水等参数的时间序列分析。 #### 2. 数据处理流程示例 以下为GEE中计算NDVI的典型代码框架: ```javascript var sentinel2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') .filterDate('2023-01-01', '2023-12-31') .filterBounds(geometry); var ndvi = sentinel2.map(function(image) { return image.normalizedDifference(['B8', 'B4']).rename('NDVI'); }); Map.addLayer(ndvi.mean(), {min:0, max:1, palette:['white', 'green']}, 'NDVI'); ``` 此脚本完成时间序列NDVI计算与可视化,利用云端计算避免数据下载[^2]。 #### 3. 独特技术优势 - **海量数据处理**:单次运算可处理PB级数据,如全球30米分辨率土地覆盖分类 - **时序分析能力**:支持$(\text{imageCollection.filterDate()})$快速构建时间序列 - **算法集成**:内置$(\text{ee.Reducer()})$统计模块,可计算均值、方差等指标 #### 4. 典型应用场景 | 领域 | 数据组合 | 算法案例 | |------------|------------------------------|------------------------------| | 农业监测 | Sentinel-2 + MODIS | 作物分类(随机森林算法) | | 森林火灾 | Landsat-8 + VIIRS热点数据 | 燃烧指数计算$(\text{NBR})$ | | 城市扩张 | 夜间灯光数据 + Landsat | 主成分分析(PCA) |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值