假設我有一個名爲charPP的char [2] [3],2行,3列。初始化和瀏覽字符[] []
- 用虛擬數據初始化整個事物的最佳方法是什麼?
- 我將如何更改某個單元格的值?例如,使它成爲每行最後一列的指針是一個nullptr?
- 如果我做了
reinterpret_cast<char**>(charPP[0])
會發生什麼?
對不起,如果這是通用或模糊的,我只是尋找一些基本的瞭解。
假設我有一個名爲charPP的char [2] [3],2行,3列。初始化和瀏覽字符[] []
reinterpret_cast<char**>(charPP[0])
會發生什麼?對不起,如果這是通用或模糊的,我只是尋找一些基本的瞭解。
char charPP[2][3] = { 0 };
charPP[i][j] = 0;
char[0][2] = 0; char[1][2] = 0;
可能的混亂,因爲你鑄造char值(-128〜127)到char**
。
至於案例編號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,你知道如何訪問單個單元格爲一個簡單的(一維)數組嗎?對於多維數組而言,只要您記得您有一個陣列即可。
啊,我想這是一個有缺陷的問題。我將把它重命名爲char 2D數組,併爲char **重新提出並提出另一個問題。謝謝。 – scorkla
如果你想初始化爲全零,只需使用'charcharPP [2] [2] = {0};' –
@CaptainObvlious Right謝謝。 –
我的意思是詢問char **,但輸入錯誤。 :/所以我問了一個錯誤的問題,但你答對了。謝謝! – scorkla