数组指针

数组指针的定义:

void main()

{

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

int (*p)[2];

p = a;

}

上述代码中p就是一个数组指针变量,它指向一个数组。那么我们需要做的就是要弄明白数组名与数组指针变量之间的关系。

我们来想一下,a,a[0],a[1],p,a+1,a[0]+1,p+1都代表什么含义。

(1)a:a是一个数组名,类型是指向一维数组的指针,不是变量,a的值是指针常量,即不能有a++或者a=p这些操

作。a指向这块连续空间的首地址,值是&a[0][0]。

(2)a[0]:a[0]是一维数组名,类型是指向整型的指针,值是&a[0][0],这个值是一个常量。

(3)a[1]:a[1]是一维数组名,类型是指向整型的指针,值是&a[1][0],这个值是一个常量。

(4)p:p是一个数组指针变量,指向一维数组的指针变量,值是&a[0][0]。可以执行p++;p=a等操作。

(5)a+1:a+1表示指向下一行元素,也可以理解为指向下一个一维数组。*(a+1)是取出第一行的首地址。

(6)a[0]+1:a[0]+1是指向第0行第1个元素,也可以理解为指向一维数组a[0]的第一个元素。

(7)p+1同a+1,*(p+1)同*(a+1),虽然a跟a[0]值是一样,但类型不一样,表示的意义不一样。通过分析就不难理解

为什么*(*(a+i)+j)和a[i][j]等效了。

如:int a[3][4]; int(*p)[4]; int(*p)[4]中的p是指向一维数组的指针变量,p可以赋值:

若p=a;则(p+i==&a[i]),(*(p+i)==a[i]),(*(p+i)+j==&a[i][j]),(*(*(p+i)+j)==a[i][j])。

 数组名与数组指针之间的区别:

数组名是指针,类型是指向元素类型的指针,但值是指针常量,声明数组时编译器会为声明所指定的元素数量保留内

存空间。

数组指针是指向数组的指针,声明指针变量时编译器只为指针本身保留内存空间。

在这里我们需要注意的就是(a+1)的类型是一个指针变量。当我们把数组名作为函数参数传递的时候实际上传递的是一

个指针变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值