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位系统测试)
在这里插入图片描述
在这里插入图片描述
二级指针定义及取值
在这里插入图片描述
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐