结构体struct简介(下)

博图SCL编程:结构体(STRUCT)使用详解与实战案例 在项目树 → PLC数据类型中创建UDT(用户自定义数据类型)// 电机转速// 电机电流// 运行状态// 故障代码END_STRUCT;END_TYPE在函数块(FB)或函数(FC)的VAR区直接声明:VAREND_STRUCT;END_VAR创建UDT_Motor(如前文定义)。结构体是SCL模块化编程的核心工具之一,它能:✅减少代码冗余✅提升数据逻辑性✅简化接口设计✅加速项目调试掌握结构体的灵活应用,是编写高效、可维护SCL代码的关键一步。立即尝试。 阅读详情
本文整理自:
本文转载自:
http://blog.youkuaiyun.com/hudashi/article/details/7400678
六、结构体指针变量 
    指向一个结构体的指针变量称之为结构体指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 通过结构指针即可访问该结构变量, 这与数组指针和函数指针的情况是相同的。 结构指针变量说明的一般形式为:  
struct 结构名*结构指针变量名  
例如,在前面中定义了的stu这个结构体, 如要说明一个指向stu的指针变量pstu,可写为:  
struct stu *pstu;  
   当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,
结构指针变量也必须要先赋值后才能使用。赋值是把结构变量的首地址赋予该指针变量, 不能把结构体类型名赋予该指针变量。
如果boy是被说明为stu类型的结构变量,则: pstu=&boy是正确的,而: pstu=&stu是错误的。 
   结构体类型名和结构体变量是两个不同的概念,不能混淆。 结构体类型名只能表示一个结构体的形式,编译系统并不对它分配内存空间。 只有当某变量被说明为这种类型的结构体时,才对该变量分配存储空间。 因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。 
通过结构体指针变量,能方便地访问结构体变量的各个成员。 
其访问的一般形式为:
  (*结构指针变量).成员名 或为:  结构指针变量->;成员名  
例如:  (*pstu).num或者:  pstu->;num 
应该注意(*pstu)两侧的括号不可少, 因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。 下面通过例子来说明结构指针变量的具体说明和使用方法。 
示例6.1
struct stu
{
   int num;
   char *name;
   char sex;
   float score;
} boy1={102,"Zhang ping",'M',78.5},*pstu;
main()
{
   pstu=&boy1;
   printf("Number=%d\nName=%s\n",boy1.num,boy1.name);
   printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
   printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
   printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);
   printf("Number=%d\nName=%s\n",pstu->;num,pstu->;name);
   printf("Sex=%c\nScore=%f\n\n",pstu->;sex,pstu->;score);
}
    本例程序定义了一个结构stu,定义了stu类型结构变量boy1 并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1 。然后在printf语句内用三种形式输出boy1的各个成员值。 从运行结果可以看出:  
结构变量.成员名 
(*结构指针变量).成员名 
结构指针变量->;成员名  
  这三种用于表示结构成员的形式是完全等效的。
七、结构体数组指针变量

结构指针变量可以指向一个结构体数组, 这时结构体指针变量的值是整个结构体数组的首地址。  因为结构指针变量也表示指向结构体数组的一个元素,所以这时该结构指针变量的值其实是该结构体数组0号元素的首地址。设ps为指向结构数组的指针变量,则ps也指向该结构数组的0 号元素,ps+1指向1号元素,ps+i则指向i号元素。 这与普通数组的情况是一致的。 
示例7.1
用指针变量输出结构数组。 
struct stu
{
   int num;
   char *name;
   char sex;
   float score;
}boy[5]={
   {101,"Zhou ping",'M',45},
   {102,"Zhang ping",'M',62.5},
   {103,"Liou fang",'F',92.5},
   {104,"Cheng ling",'F',87},
   {105,"Wang ming",'M',58},
};
main()
{
   struct stu *ps;
   printf("No\tName\t\t\tSex\tScore\t\n");
   for(ps=boy;ps<boy+5;ps++)
   printf("%d\t%s\t\t%c\t%f\t\n",ps->;num,ps->;name,ps->;sex,ps->;score);

}
    在程序中,定义了stu结构类型的外部数组boy 并作了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出 boy数组中各成员值。 
   应该注意的是, 一个结构指针变量虽然可以用来访问结构体变量或结构体数组的元素,但是,不能使它指向结构体的一个成员。 也就是说不允许取一个成员的地址来赋予它。
因此,下面的赋值是错误的。 ps=&boy[1].sex;而只能是:ps=boy;(赋予数组首地址) 或者是: ps=&boy[0];(赋予0号元素首地址) 
八、结构体变量作为函数参数使用
在函数的参数中使用结构体和一般的变量没有本质的区别,其不同仅仅是在定义上.。
比如:
int ptinrect(struct point p, struct rect r)
{
    return p.x >= r.pt1.x && p.x < r.pt2.x && p.y >= r.pt1.y && p.y < r.pt2.y;
}
九、结构体指针变量作函数参数 
    在ANSI C标准中允许用结构变量作函数参数进行整体传送。 但是这种传送要将全部成员逐个传送, 特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。 因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。 这时由实参传向形参的只是地址,从而减少了时间和空间的开销。 
示例8.1
计算一组学生的平均成绩和不及格人数。 
struct stu
{
   int num;
   char *name;
   char sex;
   float score;
}boy[5]={
   {101,"Li ping",'M',45},
   {102,"Zhang ping",'M',62.5},
   {103,"He fang",'F',92.5},
   {104,"Cheng ling",'F',87},
   {105,"Wang ming",'M',58},
};
main()
{
   struct stu *ps;
   void ave(struct stu *ps);
   ps=boy;
   ave(ps);
}
void ave(struct stu *ps)
{
   int c=0,i;
   float ave,s=0;
   for(i=0;i<5;i++,ps++)
   {
      s+=ps->;score;
      if(ps->;score<60) c+=1;
   }
   printf("s=%f\n",s);
   ave=s/5;
   printf("average=%f\ncount=%d\n",ave,c);
}
    本 程序中定义了函数ave,其形参为结构指针变量ps。boy 被定义为外部结构数组,因此在整个源程序中有效。在main 函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy 数组。然后以ps作实参调用函数ave。在函数ave 中完成计算平均成绩和统计不及格人数的工作并输出结果。由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。
TIA博途中复制存储区和结构体数据的几种方法 阅读详情

相关推荐

博途PLC1200/1500PLC用户自定义数据类型(UDT)

1、PLC自定义数据类型的本质其实是结构变量,这一数据类型对于编程的便捷和灵活性有很大的帮助,下面我们看看: 2、我们看看博图里的用户自定义数据类型的操作: 3、定义好结构变量的名称,方便后面选择: 4、PLC数据类型: 结束语: 合理巧妙的设计数据结构、将会大大减少编程工作量,起到事半功倍的效果。 ......

RXXW_Dor的博客 9049

博途V18界面的各变量用途

PLC变量也是全局,它的变量主要包括 I,Q M,类型;输入输出端口及位寄存器变量类型。在此建立的 变量数据块,它可以是自建在PLC数据类型的变量类型,也可以是各种标准的数据类型,且在DB数据块中的变量一般为全局变量,在整个项目中的程序都可以对它调用。这个也是属于PLC变量类型的, 只是这些变量是系统在对编程这在没有声明变量的情况下,直接在编程时使用变量编程,而自动生成的变量一般以名字“Tag_ ”为名。建立的PLC数据类型,都作为原型,在程序块的 数据块变量中再次创建此类型的变量,进行使用。

wan369282913的博客 3494

博途UDT(变量打包)及WINCC结构变量(变量解包)

博途UDT(变量打包)及WINCC结构变量(变量解包)

struct stat结构体简介

struct stat结构体简介 struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构 可以有两种方法来获取一个文件的属性: 1、通过路径: int stat(const char *path, struct stat *struct_stat); int lstat(const char *path,struct stat *struct_stat); 两个函数...

sunshineywz的博客 2822

AI大模型与碳足迹评估结合模式及示范案例

AI大模型与碳足迹评估相结合,可以提供更精确、更快速的碳排放量计算,优化减排策略,并促进可持续发展目标的实现。

贾贾的博客 3943

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

结构体struct简介(上)

结构体struct简介(上)

fjjjyf的博客 1271

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 195

linux 结构体 struct addrinfo 简介

目录 定义 相关方法 1. getaddrinfo(const char, const char, const struct addrinfo, struct addrinfo*) 2. freeaddrinfo(struct addrinfo*) 3. 拷贝addrinfo结构 定义 addrinfo结构主要在网络编程解析hostname时使用,其在头文件#include<netdb.h>中,定义如下: struct addrinfo { int ai_flags;

whatday的专栏 4244

DDM-MIMO-FMCW雷达速度模糊与解模糊MATLAB仿真

本文深入解析了DDM-MIMO-FMCW雷达中的速度模糊现象及其解模糊方法,通过MATLAB仿真详细展示了相位编码解调、速度扩展算法和混合波形设计三大解决方案。文章还提供了参数配置、信号建模和结果可视化的实用技巧,并分享了工程实践中的避坑指南,帮助开发者高效解决雷达信号处理中的速度模糊问题。

weixin_31528001的博客 347

PCL点云处理之计算点到空间直线距离的四种方法(二十三)

PCL点云处理之计算点到空间直线距离的四种方法

weixin_44329757的博客 3022

Linux / struct stat 结构体简介

若一目录具有 sticky 位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或 root 来删除或改名,在 linux 中,最典型的就是这个 /tmp 目录啦。这两个方法区别:stat 没有处理字符链接(软链接)的能力,如果一个文件是符号链接,stat 会直接返回它所指向的文件的属性;两个函数的第一个参数都是文件的路径,第二个参数是 struct stat 的指针。struct stat 这个结构体是用来描述一个 linux 系统文件系统中的文件属性的结构。

布袋和尚 845

1、语义数据建模:避免陷阱与突破困境

本文探讨了语义数据建模的兴起背景、核心概念、生命周期及常见挑战。从数据丰富型组织和AI开发者的需求出发,分析了语义建模的关键元素和质量维度,并深入讨论了建模过程中可能出现的陷阱与解决方案。文章还针对语义模型的演化、治理和战略组织问题提供了突破思路,旨在帮助数据从业者更好地理解和应用语义建模技术,以提升数据驱动应用的有效性。

c8d9e0f1的博客 119

linux stat 结构,struct stat结构体简介

在使用这个结构体和方法时,需要引入:struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。可以有两种方法来获取一个文件的属性:1、通过路径:int stat(const char *path, struct stat *struct_stat);int lstat(const char *path,struct stat *struct_stat);两个函数的第一...

weixin_39662611的博客 887

OpenClaw-遇到的问题-Health check failed: gateway closed (1006 abnormal closure (no close frame)): no clos

OpenClaw网关服务安装成功但运行异常,显示健康检查失败(错误代码1006)。系统提供了Web控制界面(http://127.0.0.1:18789/)和带令牌的安全访问链接。文档建议参考故障排除指南,并提供了可选应用扩展功能(包括移动端支持)。注意运行本地代理存在安全风险,建议加固系统配置。若需启用网络搜索功能,需配置Brave搜索API密钥。安装完成后会自动打开仪表盘,需保持浏览器标签页以控制OpenClaw服务。

直到世界的尽头 1万+

YOLOv8 架构改造实战:添加 P2 小目标检测头与 P6 超大目标检测头

上采样是指将特征图的空间尺寸变大(例如从 20×20 → 80×80),用来提升图像的分辨率。常见于解码器结构或特征融合中。下采样是指将特征图的空间尺寸缩小(例如从 256×256 → 128×128),通常用于减少计算量、提取更高级语义特征。操作目的方法尺寸变化上采样放大特征图插值算法变大(如2×)下采样压缩特征图、提取语义stride卷积等变小(如1/2)

FJN110的博客 574
上一篇: 结构体struct简介(上)
下一篇: 优快云-markdown编辑器的使用
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值