关于二维数组!

THEBEST 2003-05-15 10:10:55
问你一个问题?
二维数组指针怎么用++呀?
比如:int (*pz)[4];
声明一个指向包含4个int值的数组的指针,
EG:有一个数组:array[3][4]={0};
那么**pz=array[0][0]; 那么*(*(pz++)++)会不会是array[0][1]呢?好像不是这样用的,我在一个程序中有问题!(这样pz++就变成第二行了而不是第一行的第二个)

我知道用*(*(pz+m)+n)可以来取二维数组的值但我只想知道如何用自加与自减来顺序取二维数组中的所有的值!

到底如何用二维数组的指针与自加来取各个值呢?

...全文
111 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
meteor135 2003-05-17
  • 打赏
  • 举报
回复
本来打算帮你解决问题的,但是我自己又遇到新问题了。
有兴趣请看这里:
http://expert.csdn.net/Expert/topic/1796/1796515.xml?temp=.8286554
THEBEST 2003-05-17
  • 打赏
  • 举报
回复
TO: : meteor135(流星雨)

很高兴你能这样做,来分析这个问题!
我想对你说:


到底如何用二维数组的指针与自加来取各个值呢?

这个没讲到!

谁可以说说吗?
(不专门用自加或可以参些其它的参数)
THEBEST 2003-05-17
  • 打赏
  • 举报
回复
忘记了是:

http://expert.csdn.net/Expert/topic/1792/1792568.xml?temp=.7132379
THEBEST 2003-05-17
  • 打赏
  • 举报
回复
希望你能看一下这个帖!
THEBEST 2003-05-16
  • 打赏
  • 举报
回复
*(*(ptr+i)+j)这个应该是第i+1行j+1列的值吧?而不是地址吧?

另:
我想要的不是i,j形式!
而是要自加的形式来获得值.
可以吗?
hitbabiq 2003-05-16
  • 打赏
  • 举报
回复
用个指针转换一下:

char array[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};

char *p = (char *)array;
for (int i=0;i<3;i++)
{
for (int j=0;j<4;j++,p++)
cout<<*p<<endl;
}
dragonlw 2003-05-16
  • 打赏
  • 举报
回复
*(ptr+i);
如果ptr是一维指针,固然*(ptr+i)为ptr[i]的值。
如果要是二维指针,*(ptr+i)是第i+1行的首地址。
所以*(*(ptr+i)+j)就是第i+1行,j+1列的地址,呵呵



THEBEST 2003-05-16
  • 打赏
  • 举报
回复
为什么没有人回答这个问题么?
MelodyCanFLY 2003-05-16
  • 打赏
  • 举报
回复
关注,收藏
meteor135 2003-05-16
  • 打赏
  • 举报
回复
=================================================================================
问你一个问题?
二维数组指针怎么用++呀?
比如:int (*pz)[4];
声明一个指向包含4个int值的数组的指针,
EG:有一个数组:array[3][4]={0};
那么**pz=array[0][0]; 那么*(*(pz++)++)会不会是array[0][1]呢?好像不是这样用的,我在一个程序中有问题!(这样pz++就变成第二行了而不是第一行的第二个)

我知道用*(*(pz+m)+n)可以来取二维数组的值但我只想知道如何用自加与自减来顺序取二维数组中的所有的值!

到底如何用二维数组的指针与自加来取各个值呢?
=================================================================================回复楼主:
1。比如:int (*pz)[4];
//注意这只是一个一维数组指针。
//其作用相当于一个二维数组名,但可以自增自减。

2。EG:有一个数组:array[3][4]={0};
//没有想过这样的初始化方式是否合法吗?
//至少我都没有想过亲自上机调试一下,因为我没有这个意识。

3。那么**pz=array[0][0];
//如果你曾经初始化为:
//pz=array;那么*pz就是array[0],
//pz++相当于让pz指向array[1],
//因此说自增自减的步长是列的数目*sizeof(数组元素类型)。
//所以*pz++的值就是array[1],**pz++的值就是array[1][0]。
//(**pz)++是合法的,相当于array[0][0]++;
//(*pz)++是不合法的,因为不可以做array[0]++操作。
//总之,不管怎么说,只有pz自身和**pz可以自增自减,
//因此得到的结论是,不可能只用pz的自增和自减取得非第一列元素的值。
//如果想实现,除非再定义一个整数指针
//比如:int *pInt;
//初始化时可以用*pz,亦即行元素的首址。
//假如当前pz==array[2],那么pInt=*pz==>*pInt==array[2][0];
//pInt++==array[2][1];依此类推。
//如果对pInt重新赋值:pInt=a[1];那么pInt++就得到a[1][1]的地址,从而
//*pInt==a[1][1];
4。*(*(pz++)++)
//按你的愿意可能是要这样*((*(pz++))++)等价于*(*pz++)++。
//从上面的分析可知,*(*pz++)++是不合法的运算,从而也就无从谈起其它了。

mutexking 2003-05-16
  • 打赏
  • 举报
回复
你的想法从算法可以,但从语法上就可能不可实现的。自加或自减运算是的运算对象只能是变量,换而言之就是一个确切的地址空间,而*(pz++)很可能c语言会认为其是一个表达式,而拒绝编译。
cxjddd 2003-05-16
  • 打赏
  • 举报
回复
*(*(pz++)++)不能通过编译。
THEBEST 2003-05-16
  • 打赏
  • 举报
回复
没有人可以回答我?
THEBEST 2003-05-15
  • 打赏
  • 举报
回复
*(*(ptr+i)+j)
其中ptr是一个指向二维数组的指针!
那么ptr+i是表示第i行的首位置
在前面加一个*表示什么意思呢?*(ptr+i);
相关推荐
发帖
C语言

6.7w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
帖子事件
创建了帖子
2003-05-15 10:10
社区公告
暂无公告