C语言行指针

int a[3][4]; int (*p)[4];
初始化p=a;p指向a[0][0],p++之后就指向a[1][0]吗?
还是指向a[0][1]?
行指针是怎么移动的啊?

错解了。p没有指向a[0][0],因为使用*p不能输出a[0][0]的值,*p才是指向a[0][0]的,因为**p就是a[0][0]的值,而且*p输出的是&a[0][0]的地址。p是指向的a[0]也就是说p=&a[0]=a+0;的,也就是指向的二维数组的第一行。

p++ = &a[1]=a+1; 也就是指向二维数组中的第二行。

总之,要记住的是a[1]才是指向的二维数组中第2行第1个元素的地址。
而&a[1]表示的就是二维数组中第二行的行地址。
同样,因为a=a+0,表示的是二维数组中第一行的行地址。因此a+1就是表示的是二维数组中第二行的行地址。

还要记住:[ ]这个运算符的的运算法则是,把左侧的地址加上[ ]内的偏移量然后再求指针运算,注意有[ ]运算符的地方就有个隐含的指针,比如x[2]表示的就是将指针x偏移2个单位量后再求指针运算。也就说x[2]与*(x+2)是相等的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-16
二维数组也是用一维来存储的,第一行先存接着是第二行,
p++时要考虑p的类型,因为int(*p)[4]是个指向数组的指针,所以p++相当于跳过了4个元素,指向下一行的第一个元素a[1][0];
你可以写个程序P++以后输出就能看出来了。
第2个回答  2010-03-16
p++指向a[1][0].因为p为行指针。
如果int *p=a,那么p++,指向a[0][1]
相似回答