初始化和导航char [] []

Initializing and Navigating a char[][]

本文关键字:char 导航 初始化      更新时间:2023-10-16

假设我有一个名为charpp的char [2] [3],2行,3列。

  1. 使用虚拟数据初始化整个内容的最佳方法是什么?
  2. 我将如何更改某个单元的值?例如,使其成为每行最后一列的指针是nullptr?
  3. 如果我做了reinterpret_cast<char**>(charPP[0])
  4. 将会发生什么?

对不起,如果这是通用或模糊的,我只是在寻找一些基本的理解。

对于案例编号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,虽然您可以将数组用作指针(数组腐烂到指针)的确,但它仍然是一个数组,因此您不能将其"点"为null。让我们以上面的示例为例,使用char a[2][2],您不能进行a[0] = nullptr


在数字1的情况下,您知道如何访问一个单个单元格以获取简单(一维)数组?只要您记得自己的数组数组。

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

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

  3. 可能的混乱可能是因为您将char值(-128至127)投射到char**