找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
在西门子 SCL(Structured Control Language)中,没有传统 C/C++ 那样的指针和 * 解引用运算符;取而代之的是“变量引用”(REFERENCE TO),其解引用使用 ^ 运算符。
声明引用类型:如 p_a : REF INT := REF_TO a;,表示 p_a 引用变量 a 的内存地址。
解引用赋值/读取:使用 p_a^ := 10; 或 value := p_a^;,其中 ^ 是 SCL 中的解引用运算符,等效于 C 语言中的 *p。
注意:SCL 不支持裸指针(如 POINTER TO 用于通用内存寻址)的直接解引用;POINTER 类型(6 字节结构)需配合 PEEK/POKE 或 百分号间接寻址(如 %MW[myPointer])访问数据,不使用 ^ 或 *。
安全提示:REF TO 引用必须绑定有效变量,且生命周期受控;而 POINTER + PEEK/POKE 若指向非法地址(如未初始化或无效 DB)会导致运行时错误(非编译错误)。
若你指的是 S7-1200/1500 的 POINTER 类型(非引用),则?无内置解引用运算符,需用:
%MW[pointerVar](字访问)、%MB[pointerVar](字节)等百分号间接寻址语法;
或调用系统函数如 POKE_INT(pointer, value) / PEEK_INT(pointer)。
简言之:SCL 中 ^ 专用于 REF TO 解引用;POINTER 类型靠 %[] 或 PEEK/POKE 操作,不叫“解引用运算符”。
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城