C中指向二维数组的指针为什么不是三级指针?

查看:123
本文介绍了C中指向二维数组的指针为什么不是三级指针?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

声明一个二维数组d_arrayint d_array[2][2];
现在已经知道d_array == &d_array[0]
d_array[0] == &d_array[0][0]
所以说有**d_array == d_array[0][0]
说明d_arrayd_array[0][0]的指针的指针,也就是说d_array是一个二级指针
那么我认为指向d_array的指针应该是三级指针,然而对于下列程序

int ***ptr;
ptr = &d_array;

编译器报:warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
也就是说指向d_array的指针并不是三级指针,这是为什么?

解决方案

首先,数组名不是指针,但可以向指针转化,就像int转化double。所以数组名和指针这两个概念不要混为一谈,因为有时数组名的imexplict 退化指针确实让人模糊。

其次,对数组名取址,取到的是数组地址,这由此又要提出一个概念,数组指针,例如int a[2],则数组指针int (*p)[2]=&a ,而对于二维数组a2.则有int (*p)[2][2]=&a。

建议楼主看下数组指针与指针数组的区别,后者很容易理解,但前者,其实也不难,但要真正理解它你需要先理解一些其它的c++细节,百度都有,耐心点看,耐心耐心耐心看。

--------------------------------------昨晚手机打的,有些错误,今早已经更新了-----------

http://blog.csdn.net/laojiu_/...

参考下这篇吧,对着编译器监视观察其类型即可。

这篇关于C中指向二维数组的指针为什么不是三级指针?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆