没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
数组指针和指针数组的区别
一、数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明 p 是一个指针,指向一个整型的一维数组,这个一维数组的长
度是 n,也可以说是 p 的步长。也就是说执行 p+1 时,p 要跨过 n 个整型数据的长度。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含 4 个元素的一维数组。
p=a; //将该二维数组的首地址赋给 p,也就是 a[0]或&a[0][0]
p++; //该语句执行过后,也就是 p=p+1;p 跨过行 a[0][]指向了行 a[1]
[]
所以数组指针也称指向一维数组的指针,亦称行指针。
二、指针数组
定义 int *p[n];
[]优先级高,先与 p 结合成为一个数组,再由 int*说明这是一个整型指针数组,它有
n 个指针类型的数组元素。这里执行 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]
优先级:()>[]>*
资源评论
叶兆萍
- 粉丝: 5
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功