我在一个函数中遇到了这个构造(e 是传递给函数的参数):
short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]);
及其使用(其中 i 是 for 循环中的计数器):
(*tt)[i][0]
我想我完成了作业的第一部分:
short (*tt)[][2]
据我了解,tt 被声明为指向短裤数组的指针。 第二部分让我感到困惑,看起来像是某种类型转换,但我不确定我是否理解它的作用,特别是这个:(*)。它是如何工作的?
heater_ttbl_map 声明如下(其中 pointer1 和 pointer2 都是 short 的二维数组):
static void *heater_ttbl_map[2] = {(void*)pointer1, (void*)pointer2};
至于它的使用,我明白 tt 所指向的是被取消引用的(它是数组第 i 个索引的第三个索引的内容,这是一个 short)但是为什么要这样写:
(*tt)[i][0]
不是这样的:
*tt[i][0]
是不是因为tt本身不是数组而是指向数组的指针?
最佳答案
由于运算符优先级([]
优先于 *
运算符),两个语句存在差异 -
(*tt)[i][0]
在此,您访问指针 tt
指向的数组的索引 [i][0]
处的元素。
然而,在这个——
*tt[i][0]
首先访问索引 [i][0]
处的元素(可能是二维指针数组),然后取消引用。
交替使用它们会导致访问或取消引用未经授权的内存位置,并导致未定义的行为。
关于c++ - 指针声明基础(多维数组指针赋值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944498/