区分数组指针与指针数组

1.概念的区分:

数组指针:数组的指针,首先说它是一个指针,一个指向数组的指针。

指针数组:指针的数组,它是一个数组,数组中存放的内容为指针。

2.优先级的不同:

优先级为 () > [] > *

比如int (p)[n],因为()的优先级最高,p先于结合,所以p是一个指针,后面是数组,于是这个就是数组指针。

在如int p[n],[]优先级比高,p先与[]结合,所以p是一个数组,前边又有*,所以是指针数组。

3看图

在这里插入图片描述

4.举例说明:

(1).数组指针的例子

#include <stdio.h>
int main(void) {
int arrP[5] = {1,2,3,4,5};//定义一个数组并赋值
int (*p)[5] = &arrP;//定义一个数组指针并为其赋值

printf("%p\n",arrP);//数组名为数组首元素的地址 与 &arrP[0] 等价
printf("%p\n",p);//p为arrP的地址 及 &arrP,注意:虽然arrP与&arrP值相同,单代表的意思却不一样,类型却不同。arrP代表首元素的地址,&arrP代表数组的地址。
    printf("%p\n",*p);//*p代表arrP,所以这个表示arrP首元素的地址
    printf("%d\n",**p);//既然*p代表首元素的地址,**p为求这个地址上的值
    printf("%d",(*p)[1]);//*p为arrP,所以(*p)[1]就是arrP[1]的值
return 0;

}

(2).指针数组的例子

#include <stdio.h>
int main(void) {
int x = 100;
int y = 200;
int *p[2];//定义一个指针数组
p[0] = &x;
p[1] = &y;
printf("%p\n",p[0]);//x的地址
printf("%p\n",&x);//x的地址
printf("%d",*p[0]);//x的值
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值