初始化和导航char [] []

时间:2014-01-25 21:06:48

标签: c++ memory-management

让我说我有一个名为charPP的char [2] [3],2行,3列。

  1. 用虚拟数据初始化整个事物的最佳方法是什么?
  2. 我如何更改某个单元格的值?例如,如此指向每行中最后一列的指针是nullptr?
  3. 如果我做了reinterpret_cast<char**>(charPP[0])会怎样?
  4. 很抱歉,如果这是通用的或模糊的,我只是在寻找一些基本的理解。

2 个答案:

答案 0 :(得分:1)

对于第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)

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

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

  3. 因为您将char值(-128到127)转换为char**,可能会产生混乱。