当前位置: 代码迷 >> C语言 >> 二维数组与指针
  详细解决方案

二维数组与指针

热度:170   发布时间:2006-07-07 16:26:20.0
二维数组与指针
请教各位高人,我们知道如果有
int a[n], *p;
那可以用p=a来指向一维数组a,指针p的移动是一次移动向下移动一个地址。

但是如果有
int a[3][4],*p;
那么p++移动的时候每次指向的是a[0][0]、a[1][0]、a[2][0]的地址,如果要指向a[2][3],那该如何控制指针了?请详细说明一下喽,实在很模糊喽!
搜索更多相关的解决方案: 指针  详细说明  int  高人  模糊  

----------------解决方案--------------------------------------------------------
再加个*
----------------解决方案--------------------------------------------------------

*(p+2*4+3)


----------------解决方案--------------------------------------------------------
以下是引用SunShining在2006-7-7 18:10:31的发言:

*(p+2*4+3)

什么意思啊!

没道理的撒


----------------解决方案--------------------------------------------------------
定义P为指向数组的指针
int (*p)[4];
p=a;
这样就可以了
----------------解决方案--------------------------------------------------------
以下是引用乌鸦丘比特在2006-7-7 19:53:35的发言:
定义P为指向数组的指针
int (*p)[4];
p=a;
这样就可以了

可以了???
是可以用来指向二维数组了还是一维数组,如果是二维数组的话那要怎么运用呢?


----------------解决方案--------------------------------------------------------
以下是引用乌鸦丘比特在2006-7-7 19:53:35的发言:
定义P为指向数组的指针
int (*p)[4];
p=a;
这样就可以了

int *p=a[0];
----------------解决方案--------------------------------------------------------
这个是指向一维数组的指针,p++完成的结果满主楼主提出的要求

如果p=a;的话,就有
p[0][1]==a[0][1];
p[i][j]==a[i][j];
----------------解决方案--------------------------------------------------------
还有如果定义
int a[3][4],*p;
p=a[0]的话,每次p++的结果不是楼主所期待的那样是a[0][0]、a[1][0]、a[2][0]的地址
----------------解决方案--------------------------------------------------------

LZ概念浑浊..

如果定义 指向行的指针 (*p)[4]=a;.那么a[2][3]就是 *(*(p+2)+3))
如果定义 指向列的指针 *p=a[0]; 那么a[2][3]就是 *(p+2*4+3)

楼主应该还没弄明白行和列的区别..乌鸦给他解释一下吧



PS: ANSI C中 int *p=a; 是错误的


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