2014-01-25 55 views
0

假設我有一個名爲charPP的char [2] [3],2行,3列。初始化和瀏覽字符[] []

  1. 用虛擬數據初始化整個事物的最佳方法是什麼?
  2. 我將如何更改某個單元格的值?例如,使它成爲每行最後一列的指針是一個nullptr?
  3. 如果我做了reinterpret_cast<char**>(charPP[0])會發生什麼?

對不起,如果這是通用或模糊的,我只是尋找一些基本的瞭解。

回答

0
  1. char charPP[2][3] = { 0 };

  2. charPP[i][j] = 0;char[0][2] = 0; char[1][2] = 0;

  3. 可能的混亂,因爲你鑄造char值(-128〜127)到char**

+0

如果你想初始化爲全零,只需使用'charcharPP [2] [2] = {0};' –

+0

@CaptainObvlious Right謝謝。 –

+0

我的意思是詢問char **,但輸入錯誤。 :/所以我問了一個錯誤的問題,但你答對了。謝謝! – scorkla

0

至於案例編號3,我想你真的是指reinterpret_cast<char**>(charPP)?那麼你只是不能訪問一個數組的數組作爲指針的指針,因爲內存佈局不兼容。

比方說你有一個數組char a[2][2],它的內存佈局將是

 
+---------+---------+---------+---------+ 
| a[0][0] | a[0][1] | a[1][0] | a[1][1] | 
+---------+---------+---------+---------+ 

但是,如果你使用指針的指針(即char **),您作爲上述陣列,它應該是這樣的:

 
+------+------+-----+ 
| a[0] | a[1] | ... | 
+------+------+-----+ 
    |  | 
    |  V 
    |  +---------+---------+---------+-----+ 
    |  | a[1][0] | a[1][1] | a[1][2] | ... | 
    |  ----------+---------+---------+-----+ 
    V 
    +---------+---------+---------+-----+ 
    | a[0][0] | a[0][1] | a[0][2] | ... | 
    +---------+---------+---------+-----+ 

對於情況2號,而這是真的,則可以使用陣列作爲指針(數組衰變爲指針),它仍然是一個陣列,以便可以」使它的一部分「點」爲空。讓我們拿上面的例子,用char a[2][2],你不能做a[0] = nullptr


在案例編號1,你知道如何訪問單個單元格爲一個簡單的(一維)數組嗎?對於多維數組而言,只要您記得您有一個陣列即可。

+0

啊,我想這是一個有缺陷的問題。我將把它重命名爲char 2D數組,併爲char **重新提出並提出另一個問題。謝謝。 – scorkla