对数组指针的理解

本篇文章是本人在学习c语言的一些感悟,便于大家更好的理解数组指针,如若有什么讲得不完善甚至错误的地方,欢迎大家在评论区批评指正。
什么是数组指针:

专门指向数组的指针变量,它的进步值是整个数组的字节数。

定义数组指针:

类型 (*指针变量名) [n];

类型和n决定了 数组指针 指向的是什么样的数组。

int arr[5] = {1,2,3,4,5};
    int (*p)[5] = &arr;

举个例子,上面的代码定义了一个指向数组arr的名为p的数组指针。

由之前的对指针的学习可知,arr是该数组的第一个数值的地址,是int*类型的一个常量。而int (*p)[5]是对arr取地址而得到的。由此我们联想之前对二阶指针的学习,我们可以将int (*p)[5]中定义的p理解成一个二阶指针,这样就让我们能很轻松的理解一些有关数组指针的数据类型。

以下是对一些数据类型的理解

int arr[n];
arr 是 int*类型 
*arr 是 int 类型
&arr[0] 也是 int*类型
&arr 是 int (*)[n]类型 
arr[i] <=> *(arr+i)

一维数组我就不多加赘述,相信大家应该能很轻易的理解。
    
int arr2[row][col];
arr2 是 int (*)[col]类型        
*arr2 是 int* 类型        arr2是一个二维数组,我们也可以将其看出一个二阶指针,对二阶指针解引用,得到的是一个地址,即 int*类型;
**arr2 是 int 类型         同理,解引用两次得到的就是一个数值,即int类型;
&arr2[0] 是 int (*)[col]类型        arr2[0]的含义是二维数组arr2第一行的第一个数值的起始地址,对地址取地址得到的是一个二阶指针,这里也能与前面的将int (*p)[n]中的p理解为一个特殊的二阶指针相呼应。
&arr2[0][0] 是 int* 类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值