让我说我有一个名为charPP的char [2] [3],2行,3列。
reinterpret_cast<char**>(charPP[0])
会怎样?很抱歉,如果这是通用的或模糊的,我只是在寻找一些基本的理解。
答案 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)
char charPP[2][3] = { 0 };
charPP[i][j] = 0;
char[0][2] = 0; char[1][2] = 0;
因为您将char值(-128到127)转换为char**
,可能会产生混乱。