我在函数内部遇到了这种构造(e是传递给函数的参数):

short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]);

及其用法(其中i是for循环内的计数器):
(*tt)[i][0]

我想我已经完成了作业的第一部分:
short (*tt)[][2]

据我了解,tt被声明为指向短裤数组的指针。
第二部分虽然使我感到困惑,但看起来像是某种类型的转换,但是我不确定我能理解它的作用,尤其是这样:(*)。它是如何工作的?

声明如下的heater_ttbl_map(其中pointer1和pointer2都是短裤的二维数组):
static void *heater_ttbl_map[2] = {(void*)pointer1, (void*)pointer2};

至于它的用法,我知道tt指向的内容已被取消引用(以及它的数组i索引的第三个索引的内容,这很短),但是为什么要这样写:
(*tt)[i][0]

而不是这样:
*tt[i][0]

是因为tt本身不是数组而是数组的指针?

最佳答案

由于运算符优先级([]的优先级高于*运算符),所以两个语句之间存在差异-

(*tt)[i][0]

在此,您可以访问[i][0]指针指向的数组索引tt处的元素。

而在此-
*tt[i][0]

首先访问索引为[i][0]的元素(可能是二维指针数组),然后将其取消引用。

交替使用它们会导致访问或取消引用未授权的内存位置,并导致不确定的行为。

关于c++ - 指针声明的基础知识(多维数组指针的分配),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36944498/

10-12 16:13
查看更多