指针声明基础(多维数组指针的赋值)

zak*_*kos 1 c c++ arrays pointers

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

short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]);
Run Code Online (Sandbox Code Playgroud)

及其用法(其中i是for循环中的计数器):

(*tt)[i][0]
Run Code Online (Sandbox Code Playgroud)

我想我得到了作业的第一部分:

short (*tt)[][2]
Run Code Online (Sandbox Code Playgroud)

据我所知,tt被声明为指向一组短裤阵列的指针.第二部分令我感到困惑,看起来像是某种演员,但我不确定我理解它的作用,尤其是:(*).它是如何工作的?

heater_ttbl_map声明如下(其中pointer1和pointer2都是shortimensional shortet数组):

static void *heater_ttbl_map[2] = {(void*)pointer1, (void*)pointer2};
Run Code Online (Sandbox Code Playgroud)

至于它的使用我理解tt指向的是被解引用(并且它是数组的i索引的第三个索引的内容,这是一个简短的)但是为什么这样写:

(*tt)[i][0]
Run Code Online (Sandbox Code Playgroud)

而不是这样的:

*tt[i][0]
Run Code Online (Sandbox Code Playgroud)

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

ame*_*yCU 5

由于运算符优先级([]优先于*运算符),两个语句存在差异 -

(*tt)[i][0]
Run Code Online (Sandbox Code Playgroud)

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

然而,在这 -

*tt[i][0]    
Run Code Online (Sandbox Code Playgroud)

首先访问索引处的元素[i][0](可能是指针的二维数组)然后解除引用.

可互换地使用它们会导致访问或取消引用未经授权的内存位置并导致未定义的行为.