(*ptr)[2]是一个行指针,它所表示的是每一行中有两个元素,这个知识又要涉及到二维数组的知识,建议你好好的看看关于二维数组的指针知识!
昨天因为有事情,没有好好的解释一下关于二维数组的知识,今天特来补充一下!
对于二维数组的元素,我们有两种方法来输入其中的元素,一种就是通过对行与列的下标控制来实现,这种方法不需要用指针就可以实现!当然我想说的是通过二维数组指针来实现!
对于a[2][4];这个数组,我们可以这样来看它,就是我们可以把它当做一维数组来处理,怎么回事呢?
我们可以把它看做是由两个一维数组a[0]与a[1]组成的。其中在每一个这样的一维数组中储存了四个元素,也就是说其实在a[0],a[1]中储存了四个元素,所以我们可以通过对一维数组的操作来实现对二维数组的操作!
这又是怎么回事呢?
先讲解一下关于二维数组的指针式怎么一回事吧!
上面我们把二维数组看做是一维数组来处理,其实真正意义上的确不是的,这怎么越听越糊涂吧?呵呵!
上面的一维数组只是一个指向二维数组的指针,比如:a[0]=&a[0][0];也就是说一维数组是一个指向二维数组每一行的第一个元素的地址,同样a[1]则是指向a[1][0]的地址的指针,看到这里不知道你是否有一点“山重水复疑无路,柳暗花明又一天”的感觉?
如果还是不太明白的话,那下面的解释你应该会有点明白吧!
先看一下下面的这个程序的一部分:int a[2][4],*p;p=a;这里的p=a不是我们想像的指向a[0][0]的地址的指针,p指向的是一维数组a[0]的地址,而一维数组的指针才是指向二维数组的地址的,这个一定要搞清楚了!那么如果我那么要对p进行操作的话,比如:p+1;是什么呢?我刚才已经说了,p指向的是一维数组的地址,因此p+1当然指的是a[1]的地址呗!那么怎么才能够实现对二维数组的操作呢?别着急。。。
这就需要我们定义一个行指针来实现了!也就是改帖子里的那个(*ptr)[2]了,我已经讲过它表示的是每一个一维数组里的元素个数,比如我现在想对a[1][2]进行指针操作呢?我们这时可以这样:*(*(p+1)+2)就表示的是a[1][2]这个元素了!
好了,就讲这么多吧!打字挺累的喔!呵呵!
[
本帖最后由 我菜119 于 2009-10-23 16:45 编辑 ]