在runtime中,指针存储对象的内存地址,例如变量或函数块实例。
指针的声明语法:
<pointer name>: POINTER TO <data type | data unit type | function block>;
.示例
FUNCTION_BLOCK FB_Point
VAR
piNumber: POINTER TO INT;
iNumber1: INT := 5;
iNumber2: INT;
END_VAR
piNumber := ADR(iNumber1); // piNumber is assigned to address of iNumber1
iNumber2 := piNumber^; // value 5 of iNumber1 is assigned to variable iNumber2 by dereferencing of pointer piNumber
对指针进行解引用意味着获取指针所指向的值。通过将内容操作符 ^ 添加到指针标识符(例如,上面示例中的piNumber^)来解除指针的引用。要将对象的地址赋值给指针,需要对对象应用地址运算符ADR:ADR(iNumber1).
在线模式,你可以单击
,从指针跳转到引用变量的声明位置。当指针指向I/O输入时,应用写访问。这将导致编译器在生成代码时警告'<指针名称>' 不是有效分配目标.示例:pwInput := ADR(wInput); 如果需要这种类型的构造,则必须首先将输入值(wInput)复制到具有写访问权的变量中。 |
CODESYS允许对类型POINTER TO变量以及数据类型STRING 或 WSTRING的索引访问[]。
也可以通过在指针标识符后附加括号操作符[] 来访问指针所指向的数据(例如piData[i])。指针的基本数据类型决定了数据类型和索引组件的大小。在这种情况下,通过向指针的地址添加依赖于索引的偏移量i * SIZEOF( <base type> )来实现对指针的索引访问。指针同时被隐式地解引用。
计算:piData[i] := (piData + i * SIZEOF(INT))^;
这是不:piData[i] != (piData + i)^.
索引访问STRING
当对类型为STRING的变量使用索引访问时,将在索引表达式的偏移量处获得字符。结果为BYTE类型。例如,sData[i]将字符串sData的第i个字符作为SINT(ASCII)返回。
索引访问WSTRING
当将索引访问与WSTRING类型的变量一起使用时,将在索引表达式的偏移量处获得字符。结果为WORD类型。例如,wsData[i] 将字符串的第i个字符作为INT (Unicode)返回。