关于指针数组和数组指针的疑惑
我是一名初学C语言的大一学生,最近学到指针数组和数组指针还有二维数组,二维指针的知识,一开始觉得很困惑,然后就上网看了很多人关于它们的分析,但我发现很多人都没搞懂它们之间的联系和区别,于是,我便在电脑上做了一些小实验再加上自己的分析,于是我得出了这么一个结论:教科书上说数组名是一个constant类型的指针,其指向了该数组的首元素,我以这个为正确做了以下分析:
指针数组是一个数组,数组元素是指针,这个数组的数组名是一个指针,指向了这个数组的首元素,这个元素又是一个指针,所以这个数组名是一个指向指针的指针,所以它是二维指针;
数组指针是一个指针,其指向了一个数组,而这个数组名又是一个指针,所以数组指针也是一个二级指针;
二维数组是一个数组,其数组名是一个constant的指向了一维数组的指针,如(a[2][2],a指向了a[0]),而一维数组也是一个指针,所以二维数组也是一个二维指针。
上面的推论我在电脑上进行了验证发现都是可以的,主要验证方法是定义了一个指针数组,一个数组指针,一个二维数组,二维指针,然后通过 *( *( x + i ) + j )的形式去访问发现都是可行的。但是当我想把数组指针的变量名,或者是二维数组的数组名当做实参传递给 函数fun( int **p )时发现编译报错,这时我的疑惑就来了:既然数组指针和二维数组都是二维指针,那为什么不能传递呢?是不是因为我上面的分析有错误??那错在哪儿呢?希望有大神可以帮助我解决这个疑惑?谢谢