永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-03-25 17:31
数组指针和指针数组的区别
最佳答案
数组指针(也称行指针)
定义 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指向下一个数组元素,这
样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地
址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
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]

优先级:()>[]>*
全部回答
数组指针,就是一个指向数组首元素的指针,或者说是指向一个数组起始内存地址的指针。
指针数组,就是一个数组中的所有元素类型均为指针,也就是说是一个专门用来存放一堆指针的数组。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
(好看视频)里面怎样才能看电影
幼儿小班存在哪些问题
79×52列竖式计算怎么算
CSS,JS 放置位置与前端性能的关系
本兮是全能型歌手吗'她会编曲吗?
有知道这种图怎么作的吗
密室逃脱越狱逃生挑战50个房间2第九关怎么过
西部文化和西部开发(15分)①中国西部是什么
怎么样分辨我的买的灯管是荧光灯还是LED的呢
三年清知府,十年雪花银中的清什么意思?
人去世烧三期五期下雨好吗?
“只读”文件怎么删除不掉?电脑能把“只读”
我的proe为什么没有右键显示快捷菜单功能
我感觉消防战士很可怜,包括他们的父母也一样
请问您知道句容市消费怎么样么 ?
推荐资讯
哪位知道日用陶瓷的种类有哪些
麻树坡在越南什么地方?
月亮陨石的特征
两个字概括民间疾苦
求凛凛蝶的本子,百度云,不要解码的
单选题下列不是传染病流行的基本环节是A.传染
“你不要过来看我” 和“你不用过来看我”有
1又4分之1里有______36分之1
5米8宽67000长是多少亩地
租客擅自将房子转租给他人怎么办?
1998年西凤酒,38度白酒,价格多少
人死后百日那天下葬是否合适
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?