關於二維數組!


問你一個問題?
二維數組指針怎么用++呀?
比如:int (*pz)[4];
聲明一個指向包含4個int值的數組的指針,
EG:有一個數組:array[3][4]={0};
那么**pz=array[0][0];  那么*(*(pz++)++)會不會是array[0][1]呢?好像不是這樣用的,我在一個程序中有問題!(這樣pz++就變成第二行了而不是第一行的第二個)

我知道用*(*(pz+m)+n)可以來取二維數組的值但我只想知道如何用自加與自減來順序取二維數組中的所有的值!

到底如何用二維數組的指針與自加來取各個值呢?

14 个解决方案

#1


*(*(ptr+i)+j)
其中ptr是一個指向二維數組的指針!
那么ptr+i是表示第i行的首位置
在前面加一個*表示什么意思呢?*(ptr+i);

#2


為什么沒有人回答這個問題么?

#3


*(ptr+i);
如果ptr是一維指針,固然*(ptr+i)為ptr[i]的值。
如果要是二維指針,*(ptr+i)是第i+1行的首地址。
所以*(*(ptr+i)+j)就是第i+1行,j+1列的地址,呵呵



#4


用個指針轉換一下:

  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;
  }

#5


*(*(ptr+i)+j)這個應該是第i+1行j+1列的值吧?而不是地址吧?

另:
我想要的不是i,j形式!
而是要自加的形式來獲得值.
可以嗎?

#6


沒有人可以回答我?

#7


*(*(pz++)++)不能通過編譯。

#8


你的想法從算法可以,但從語法上就可能不可實現的。自加或自減運算是的運算對象只能是變量,換而言之就是一個確切的地址空間,而*(pz++)很可能c語言會認為其是一個表達式,而拒絕編譯。

#9


=================================================================================
問你一個問題?
二維數組指針怎么用++呀?
比如: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++)++是不合法的運算,從而也就無從談起其它了。

#10


關注,收藏

#11


TO:  : meteor135(流星雨) 

很高興你能這樣做,來分析這個問題!
我想對你說:


到底如何用二維數組的指針與自加來取各個值呢?

這個沒講到!

誰可以說說嗎?
(不專門用自加或可以參些其它的參數)

#12


本來打算幫你解決問題的,但是我自己又遇到新問題了。
有興趣請看這里:
http://expert.csdn.net/Expert/topic/1796/1796515.xml?temp=.8286554

#13


希望你能看一下這個帖!

#14


忘記了是:

http://expert.csdn.net/Expert/topic/1792/1792568.xml?temp=.7132379

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



一維,二維數組 數組(2)二維數組 數組,二維數組 數組(二維數組) 數組 二維數組 數組及二維數組 數組---二維數組 二維數組和二維指針 二維數組和二維指針 二維數組和二維指針
 
粤ICP备14056181号  © 2014-2021 ITdaan.com