二维数组地址及指针辨析详解

本文解释了一维数组名arr为何被视为int(*)[3]而非int[2][3],并对比了arr和int**的区别。通过实例说明数组名的地址含义和类型转换警告。重点在于理解数组指针和数组地址的概念,以及它们在内存中的移动方式。
摘要由CSDN通过智能技术生成

 

一维数组名代表一维数组中首元素的地址,同时也代表整个一维数组。

Eg:int arr[3] = {1,2,3}//arr的类型是int *(注意这里不要说成是int [3]类型,因为arr是数组名,数组名代表数组首元素的地址,地址就是指针,指针的类型就是int *)

       Int (*p) [3]= &arr//这里定义的是一个数组指针,他的本质就是指针,指向的类型必须是int [3]类型,arr此时代表整个数组,所以&arr就是将整个数组的地址给了p;注意arr的地址是与&arr一样的但是类型不一样,&arr代表整个数组,arr代表数组里面的首元素的地址。这是最标准的写法。

 Int (*p)[3]= arr;这里由于两者类型不一样所以会报警告。

1.为什么说arr的类型是int (*)[3]而不是int [2][3]?

直接这里可以记住这个规律他这里问的是arr的类型,不是int arr[2][3]的类型,arr的类型是int (*)[3],int arr[2][3]的类型是int [2][3],这里问的是这个整体。

2.为什么说arr不是int**

如果arr的数据类型是int**,那么他指向的数据类型就是int *,那么他+1,应该移动8个(64os)/4个(32os)字节,然而!我们给arr+1,他移动了16个字节,移动了一个数组。所以,a指向的是一维数组(这个数组中有4个元素)

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值