我在函数内部遇到了这种构造(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/