c++ - 指针声明基础(多维数组指针赋值)

标签 c++ c arrays pointers

我在一个函数中遇到了这个构造(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/

相关文章:

c++ - 如何制作轻量级的加载-存储屏障

c++ - 具有模板化参数的模板函数的类型推断

c++ - 如何检测 LZW 解码的码字长度

c - 构建 Anjay 教程代码

javascript - ES6 数组解构并分配给没有函数的对象

c++ - 每次我在 visual studio 2015 中构建时出现权限错误

c - 了解 makefile 的依赖级别

c - 即使我关闭所有管道,读取也没有收到 EOF C

arrays - 如何在 swift 中初始化一组空数组?

arrays - Powershell排序对象