数组指针和指针数组到底有啥区别?

什么是数组指针?什么又是指针数组?他们二者有啥区别?

这灵魂三连问往往让刚学指针的同学陷入无限的懵逼,别急!这次咱们就来彻底理清楚

指针数组

教大家一个方法,不管他的名字有多复杂,看最后俩个字就可以,比如说指针数组,最后俩个字是数组,这就说明他的本质就是数组,前面的词语都是修饰词。比如在指针数组中,指针是修饰词,只是想告诉我们首先这是一个数组,其次数组中的元素是指针,仅此而已。表现形式是int *p[4];根据运算符的优先级,P先和【4】结合,于是p【4】组成了一个4个元素的数组,然后在和*结合,说明了数组中的4个元素都是地址,也就是指针啦。给大家举个例子,函数指针数组这是个什么东东啊?通过前面的方法,我们只看后俩个字,前面的都是修饰词,后俩个字是数组,所以他的本质还是数组。通过前面的修饰词指针我们可以知道,数组中的元素是地址,在通过修饰词函数我们可以知道他的地址是函数名,综上所述函数指针数组是数组,数组中的元素是函数名。
总结:不管是指针数组还是函数指针数组,本质都是数组,只不过数组里面的元素不一样罢了,普通的数组里面的元素是int 型的,或者是char 字符型的,亦或者是double 浮点型的,这些大家都非常熟悉了,指针数组里面的类型是地址而已。比如int * p[3]={&a,&b,&c}.

放一段代码加深大家的理解

int main()
{
	int a,b,c,d;
	a=10,b=20,c=30,d=10;
	int *p[4]={&a,&b,&c,&d};
	for(int i=0;i<4;i++)
		printf("%d ",*p[i]);
	return 0;
}
数组指针

继续用我们的方法,看最后俩个字。最后俩个字是指针,好的那么他的本质就是指针。那么这个指针指向什么数据类型呢?前面的修饰词告诉了我们答案,对,他指向的是就是数组。例如:int (* p)[4];这次为什么在给*p加了括号呢?因为优先级的关系,【】的优先级比 星号优先级高,如果不加括号,p就先和【】结合,再和 星号结合,这不就成了指针数组了吗?所以为了避免这种情况,我们加了括号。int (*p)[4]首先表示这是一个指针,具体点他是一个指向含有4个元素数组的指针。这4个元素其实就是二维数组的列,代表每行有4列。所以数组指针也可以称其为行指针。
总结:数组指针本质就是指针,是指针就必须指向一个数据对象,要不然就成野指针了,那么数组指针,指针指向的对象就是数组。【】里面的数字代表二维数组有几列。

当一段代码加深大家的理解

int main()
{
	int a[2][2]={1,2,3,4};
    int (*p)[2]=a;
    printf("第一个元素:%d\n",**p);
    printf("第二个元素:%d\n",*(*p+1));
    printf("第三个元素:%d\n",**(p+1));
    printf("第四个元素:%d\n",*(*(p+1)+1));
}
以上就是全部的讲解,哎~讲的有点啰嗦了,本意就是想用大白话让大家更加清楚的理解数组指针和指针数组的含义和区别。大家如果看完的话投个票吧,这样我也可以不断的改进自己。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值