二维指针问题

qq675927952 2010-09-25 10:28:04
想请问 一下各位大牛,

int data[5][5];
怎么用 二维指针 p 指向 data[2][2] 这个元素,
且要实现p[0][-1] = data[2][1] , p[-1][0] = data[1][2] p[0][0] =data[2][2] ; p[0][1]=data[2][3];
p[1][0] = data[3][2];p[1][1] = data[3][3];




p的意义就是让 data平移一下,使 p[0][-1] = data[2][1]等,

一维的我会,可是到了二维怎么写都不对,请各位高手帮帮忙,先谢了..
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingshaofengbinbin 2010-09-26
  • 打赏
  • 举报
回复
你的p也应该是个二维的数组才行,不能仅仅是一个指针。
int (*p)[5],这样定义的p才是二维数组指针。
白云飘飘飘 2010-09-26
  • 打赏
  • 举报
回复
	int data[5][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};

typedef int (*pdata)[5][5];

pdata p=(pdata)(data[2]+2);

printf("%d %d\n",(*p)[0][-1],data[2][1]);

printf("%d %d\n",(*p)[0][1],data[2][3]);

printf("%d %d\n",(*p)[-1][0],data[1][2]);
羽飞 2010-09-26
  • 打赏
  • 举报
回复
二维的数组好像很特别,和一维空间就是不一样
hastings 2010-09-26
  • 打赏
  • 举报
回复
LZ自己顶自己~
#define M 5
#define N 5
void Dis(const int e[M][N])
{
int i,j;
for(i=0;i<M;++i)
{
for(j=0;j<N;++j)
printf("%02d ",e[i][j]);
printf("\n");
}
}
int main(int argc, char *argv[])
{
int i,j;
int data[M][N];
for(i=0;i<M;++i)
{
for(j=0;j<N;++j)
data[i][j]=i*10+j;
}
int (*pd)[N]=data;
Dis(data);
pd=(int (*)[N])&data[2][2];
cout<<"pd[0][0]=\t"<<pd[0][0]<<'\n';
cout<<"pd[0][-1]=\t"<<pd[0][-1]<<'\n';
cout<<"pd[-1][0]=\t"<<pd[-1][0]<<'\n';
cout<<"pd[-1][-1]=\t"<<pd[-1][-1]<<'\n';
cout<<"pd[0][1]=\t"<<pd[0][1]<<'\n';
cout<<"pd[1][0]=\t"<<pd[1][0]<<'\n';
cout<<"pd[1][1]=\t"<<pd[1][1]<<'\n';
////////////////////////////////////////////
// system("PAUSE");
return 0;
}

虽然可以运行,但是总觉不妥。
qq675927952 2010-09-26
  • 打赏
  • 举报
回复
帮up 一下...

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧