指针在运行时存储变量或功能块实例等对象的内存地址。
指针声明的语法:
<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 输入时,适用写入访问。这导致在生成代码时,编译器警告“'<pointer name >' 不是有效的赋值目标” 。例如 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)。
减去指针
即使在 64 位平台上,当指针是 64 位指针时,两个指针的差值结果也是DWORD
类型的值。
使用引用具有保证类型安全的优势。指针则不然。
指针的内存访问可在运行时通过隐式监控函数CheckPointer
进行检查。