当前位置: 代码迷 >> C语言 >> [求助]二级指针与二维数组的联系与区别
  详细解决方案

[求助]二级指针与二维数组的联系与区别

热度:339   发布时间:2006-06-09 07:16:55.0
/*楼主真心想学不妨一试下面这个小程序(已调试通过)*/
#include<stdio.h>
main( )
{
char a[4][20]={"Visual C++","3.141593","Good Morning","welcome"};
char(*p1)[20]=a,*pa[4]={a[0],a[1],a[2],a[3]},**p2=pa+2;
puts(*p1++);
puts(*p1++);
puts(*p2++);
puts(*p2++);
}
// [讲评]
// a 是二维数组名、相当于2级常量指针,a=&a[0]
// a[0]相当于1级常量指针,a[0]==&a[0][0]
// p1 是1个变量,属性为2级指针。
// pa 指针数组有4个元素,pa[i]存放a数组i号行的首地址(i=0,1,2,3)
// p2 是2级指针变量,最初存放pa[2]的地址。
// 当p2与pa[ ]挂上钩以后,p2++、p2--的含义就不言自明了。

[此贴子已经被作者于2006-6-9 16:41:36编辑过]


----------------解决方案--------------------------------------------------------

谢谢各位的帮忙,我有点明白了,在这里a不是二级指针,我一直都以为他是个二级指针所以类型不相符,现在我虽然知道这一点,但是还是理解不了为什么他是个二级指针。

我以前的思路是这样的a[0][0]可以表示成指针形式**a;那么a就是一个二级指针。但是实际上a,a[0],&a地址是一样的,把a[0][0]表示成**a也是对得,我错在那里了。

这里谢谢斑竹和三楼的朋友


----------------解决方案--------------------------------------------------------
a[][],a是指针
**p,p是指向指针的指针
----------------解决方案--------------------------------------------------------
说简单点。一个一级指针变量用于存放一个变量或数组的地址,一个二级指针用于存放一个指针变量的地址。要想让一个二级指针指向二维数组你要先让数组名它指向一个一级指针。(前面已说了,剩下的我就不知道了,你自己看着办)。
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-09 11:39:01
baidu

等 级:新手上路
威 望:8
帖 子:3812
专家分:0
注 册:2005-11-4
  得分:0 
以下是引用穆扬在2006-6-9 19:39:01的发言:
我从来不知道有二级指针这个概念,谁能讲讲其定义
如果我没猜错,估计是老谭因为自己不懂为了帮助自己理解而硬造的一个概念

不但有二级,还有三级,四级...


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-09 11:43:24
baidu

等 级:新手上路
威 望:8
帖 子:3812
专家分:0
注 册:2005-11-4
  得分:0 
比较合适的叫法是多级间接地址(multiple indirection),或者叫指向指针的指针(pointers to pointers )
----------------解决方案--------------------------------------------------------

二级,三级,四级则更能清楚地说明了多级间接地址的级数


----------------解决方案--------------------------------------------------------
  相关解决方案