arrays - 使用指针数学通过指针访问二维数组:需要数组类型 [Delphi]
问题描述
我完全同意Delphi中的指针数学应该特别小心使用,但我仍然不明白我在哪里错了。让我们看一下下面的类型定义:
program Project26;
{$POINTERMATH ON}
type
TCalibrationTable = array [0 .. 3] of byte;
PCalibrationTable = ^TCalibrationTable;
现在我需要 2 个数组,每个数组都有 3 个元素TCalibrationTable
(最终它们是二维的 3 × 4 数组)。并且还需要一个指向一对这样的数组对象的标题。
var
table0: array [0 .. 2] of TCalibrationTable;
table1: array [0 .. 2] of TCalibrationTable;
header: array [0 .. 1] of PCalibrationTable;
让我们初始化标头:通过指针访问数组最舒适的方法是为其分配第一个元素的地址,然后简单地索引指针以获取任意元素。
begin
header[0] := @table0[0];
header[1] := @table1[0];
现在,header[0]
作为 a PCalibrationTable
,我可以使用它来索引它,以便TCalibrationTable
从数组中获取任意类型的元素。这样header[0][2]
SHOULD BE a TCalibrationTable
,即 4 个元素的数组byte
。
但是下面的赋值会产生一个构建错误:Array type required。
header[0][2][3] := 100;
end.
为什么?
解决方案
如果您从标头中删除指针间接,您会得到:
type
TCalibrationTable = array [0 .. 3] of byte;
PCalibrationTable = ^TCalibrationTable;
var
header: array [0 .. 1] of PCalibrationTable;
变成
type
TCalibrationTable = array [0 .. 3] of byte;
var
header: array [0 .. 1] of TCalibrationTable;
或者
var
header: array [0 .. 1] of array [0 .. 3] of byte;
或者
var
header: array [0 .. 1,0 .. 3] of byte;
换句话说,一个二维数组。
你需要的是这样的:
type
TCalibrationTable = array [0 .. 3] of byte;
TCalibrationArr = ARRAY[0..2] OF TCalibrationTable;
PCalibrationArr = ^TCalibrationArr;
var
table0: TCalibrationArr;
table1: TCalibrationArr;
header: array [0 .. 1] of PCalibrationArr;
然后你可以做
header[0] := @table0;
header[1] := @table1;
header[0][1][2]:=123;
推荐阅读
- synchronization - 我想在一个屏幕中查看联系人而不点击“更多”
- javascript - 如何获得开/关序列间隔之间的时间?
- c - 如何在 GtkBuildable 接口实现中抛出错误
- flutter - 在 Windows 10 中安装颤振时出错
- c# - 如何在 Winform .net 核心上使用 MediatR
- powerbi - DAX:有没有办法将 DATEADD 与 FIRSTDATE 一起使用来显示上下文中显示的 FIRSDATE 的前一天?
- api-design - API 设计:跨资源层次的级联更新
- excel - 失败:在条目 #1 行第 25 列读取错误:外部“字段 0 个文档成功导入。0 个文档导入失败
- sql - SQL 平均计数 postgresql
- shell - 如果模式之间的值大于数字,则正则表达式打印行 - 与列位置无关的解决方案