数组指针和指针数组

数组指针和指针数组的区别:

数组指针(也称行指针)

定义 int (*p) [n];

( )的优先级高,首先说明,p是一个指针,指向的元素类型是int [n] ,也就是说这个指针的步长就是一维数组的长度,当执行p + 1时,p要跨过n个长度。

如果将一个二维数组赋给一指针,应这样:

int a[3] [4];

int (*p)[4];//定义一个数组指针,指向元素为int[4] ,即一维数组的指针。

p=a; // 将该二维数组的首地址赋给p,

p++ ; //该语句执行后,p跨过了a[0][ ] 指向a[1] [ ]

所以数组指针也称指向元素为一维数组的指针,已称行指针。

指针数组

定义 int *p[n];

[ ]的优先级高,先与p结合成为一个数组, 再由int * 说明这是一个指针数组,它由n个指针类型的数组元素,它存储的元素类型是int * 。这里执行p+1 是错误的,这样赋值也是错误的:p=a ;因为p是个不可知的表示,只存在p[0], p[1], p[2]....p[n-1],而且它们分别是指针变量用来存储变量地址。但可以这样  *p=a   ;这里 *p 表示指针数组第一个元素的值,a的首地址的值。

如何将二维数组赋值给指针数组:
int *p[3] ;

int a[3][4];

for( i =0 ;i <3; i++)

p[i] =a[i];

这里int *p[3] 表示一个一维数组,存放着三个指针变量,分别是p[0] ,p [1], p[2] 所以要分别赋值

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

优先级: ()>[ ] >*

本文是转载于:https://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html ,感谢原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值