【问题标题】:Structured Text - dereference table pointer with offset结构化文本 - 带偏移量的取消引用表指针
【发布时间】:2017-06-19 19:43:12
【问题描述】:

关于结构化文本编程语言:

如果我有一个指向表的指针:

crcTable : ARRAY [0..255] OF WORD;
pcrcTable : POINTER TO WORD;
pcrcTable := ADR(crcTable);

我想取消引用某个索引处的表,这样做的语法是什么?我认为等效的 C 代码是:

unsigned short crcTable[256];
unsigned short* pcrcTable = &crcTable[0];
dereferencedVal = pcrcTable[50]; //Grab table value at index = 50

【问题讨论】:

    标签: structured-text


    【解决方案1】:

    您需要先根据要到达的数组索引移动指针。然后进行解引用。

    // Dereference index 0 (address of array)
    pcrcTable := ADR(crcTable);
    crcVal1 := pcrcTable^;
    
    // Dereference index 3 (address of array and some pointer arithmetic)
    pcrcTable := ADR(crcTable) + 3 * SIZEOF(pcrcTable^);
    crcVal2 := pcrcTable^;
    
    // Dereference next index (pointer arithmetic)
    pcrcTable := pcrcTable + SIZEOF(pcrcTable^);
    crcVal3 := pcrcTable^;
    

    【讨论】:

    • 对于我使用指针的范围,我看不到原始 crcTable ......只有指针。所以我不能使用您的“取消引用索引 3”示例。我尝试做类似的事情: pcrcTable := pcrcTable + 3*SIZEOF(pcrcTable^);但是我遇到了语法错误。
    • 关于 crcTable 在您要使用指针的位置不可见的好点。 :-) 我相信“pcrcTable := pcrcTable + n * SIZEOF(crcVal3);”应该管用。关键是应该允许您向指针添加任何内容,而 SIZEOF() 仅用于向其添加单词的大小。
    • 如果 pcrcTable 是输入变量,您可能不允许更改它。相反,使用“pcrcTableLocal := pcrcTable + n * SIZEOF(crcVal3);”在设置 crcVal3 := pcrcTableLocal^; 之前
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 2011-02-04
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多