codesys之指针调用数组及结构体
·
codesys指针使用
我们先定义一个指向INT的指针P,然后定义一个数组将指针指向数组首元素,就是取了数组首元素的地址。然后我们把指针指向的地址的数据取出来,赋给其他变量使用。^是取指针内容的意思,也就是把指针指向的地址的数据取出来。
定义:
FUNCTION FUN_Git_CCU_VCU_Data : XK.CCU_VCU_INPUT
VAR_INPUT
END_VAR
VAR
p:POINTER TO INT;
arr:ARRAY[0..5] OF INT:=[1,2,3,2(4)];
var1:INT;
var2:INT;
p1:POINTER TO UINT;
p2:POINTER TO USINT;
p3:POINTER TO BOOL;
END_VAR
实现及使用:
FUN_Git_CCU_VCU_Data := XK.CCU_VCU_I;
p:=ADR(arr[0]);
var1:=TO_INT(SIZEOF(arr));
var1:=TO_INT(SIZEOF(arr[1]));
var1:=TO_INT(SIZEOF(p));
var1:=TO_INT(SIZEOF(p1));
var1:=TO_INT(SIZEOF(p2));
var1:=TO_INT(SIZEOF(p3));
FOR var1:=0 TO TO_INT(SIZEOF(arr)/SIZEOF(arr[1])) BY 1 DO
var2:=p^;
p:=p+SIZEOF(arr[0]);
END_FOR
加断点调试如下:
数组大小为:sizeof(int)6 26=12
数组中每个元素的大小为:2
验证指针大小为8(不论指向什么数据类型)
数组大小计算函数sizeof(A)/sizeof(A[0])
结构体指针使用
定义:
FUNCTION FUN_Git_CCU_VCU_Data : XK.CCU_VCU_INPUT
VAR_INPUT
END_VAR
VAR
p5:POINTER TO CCU_VCU_INPUT;
CCU_VCUI:CCU_VCU_INPUT;
END_VAR
实现与使用:
p5:=ADR(CCU_VCUInput);
CCU_VCUI:=p5^;
CCU_VCUI.A_VCU_CCU_0x862_DI.E31_CARDNO:=p5^.A_VCU_CCU_0x862_DI.E31_CARDNO;
验证:
先给结构体变量赋值:模块数量设为10
再断点调试结果如下
二级指针使用
注意:指针大小均为8字节(64位系统测试)
二级指针定义及取值
更多推荐
已为社区贡献1条内容
所有评论(0)