“.”与“->”有什么区别?

基于 Qt C++ 的智能工厂数字孪生系统 你想要实现一个基于 Qt C++ 的智能工厂数字孪生系统,核心是 **Qt 3D** 场景搭建 + **实时数据驱动** 设备模型。下面我将为你提供一个完整的解决方案,包含 **核心思路、实现步骤、完整代码示例** 和 **注意事项**。| **渲染层** | 3D 场景搭建、设备模型加载、实时动画渲染、用户交互。| **业务逻辑层** | 数据处理(滤波、转换)、设备状态管理、动画逻辑控制。| **数据层** | 实时采集设备数据(如传感器、PLC、MES 系统),提供数据接口。 阅读详情
用“.”的话,只需要声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域 了。因为自动分配了结构体的内存。如同 int a;一样。
用->的话,要声明一个结构体的指针,还要手动开辟一个该结构体的内存,然后把返回的指针给声明的结构体指针。才能用->正确引用。否则内存中只分配了指针的内存,没有分配结构体的内存,想要的结构体实际上是不存在。这时候用->引用自然出错了,因为没有结构体,自然没有结构体的域了。
"."我直接读做"的”。
->我读作"指向的结构体的"。


参考代码:

  1. int InitList(SqList *L)  //参数是一个指针
  2. {  
  3.     //L=(SqList *)malloc(sizeof(SqList));  
  4.     L->length=0;         //使用时要用"->"操作符
  5.     return 0;  
  6. }  
  7.   
  8. int ListEmpty(SqList L)  //参数是一个struct结构
  9. {  
  10.     if(L.length==0)      //使用时直接用"."即可
  11.         return 1;  
  12.     else  
  13.         return 0;  
  14. }  
  15.   
  16. int ClearList(SqList *L)  
  17. {  
  18.     L->length=0;  
  19.     return 0;  
  20. }  



首先 a->b 的含義是 (*a).b ,所以他們是不同的,不過的確 -> 可以用 * 和 . 實現,不需要單獨一個運算符。
嗯,我這是說現代的標準化的 C 語義上來說, -> 可以用 * 和 . 的組合實現。
早期的 C 有一段時間的語義和現代的 C 的語義不太一樣。

稍微有點彙編的基礎的同學可能知道,在機器碼和彙編的角度來看,不存在變量,不存在 struct 這種東西,只存在寄存器和一個叫做內存的大數組。
所以變量,是 C 對內存地址的一個抽象,它代表了一個位置。舉個例子,C 裏面我們寫:
a = b
其實在彙編的角度來看更像是
*A = *B
其中 A 和 B 各是兩個內存地址,是指針。
好,以上是基本背景。

基於這個背景我們討論一下 struct 是什麼,以及 struct 的成員是什麼。
假設我們有
struct Point {
int x;
int y;
};
struct Point p;
struct Point *pp = &p;
從現代語義上講 p 就是一個結構體對象, x 和 y 各是其成員,嗯。
從彙編的語義上講, p 是一個不完整的地址,或者說,半個地址,再或者說,一個指向的東西是虛構出來的地址。而 x 和 y 各是在 Point 結構中的地址偏移量。也就是說,必須有 p 和 x 或者 p 和 y 同時出現,才形成一個完整的地址,單獨的一個 p 沒有意義。
早期的 C 就是在這樣的模型上建立的。所以對早期的 C 而言, *pp 沒有意義,你取得了一個 struct ,而這個 struct 不能塞在任何一個寄存器裏,編譯器和 CPU 都無法表達這個東西。
這時候只有 p.x 和 p.y 有意義,它們有真實的地址。
早期的 C 就是這樣一個看起來怪異的語義,而它更貼近機器的表達。
所以對早期的 C 而言,以下的代碼是對的:
p.x = 1;
int *a;
a = &(p.x);
而以下代碼是錯的:
(*pp).x = 1;
因爲作爲這個賦值的目標地址表達式的一部分, *pp,這個中間結果沒法直譯到機器碼。
所以對早期的 C 而言,對 pp 解引用的操作,必須和取成員的偏移的操作,這兩者緊密結合起來變成一個單獨的操作,其結果纔有意義。
所以早期的 C 就發明了 -> ,表示這兩個操作緊密結合的操作。於是纔能寫:
pp->x = 1;

嗯,這就是它存在的歷史原因。
而這個歷史原因現在已經不重要了,現代的符合標準的 C 編譯器都知道 (*pp).x 和 pp->x 是等價的了。

說句題外話, C++ 裏面還發明了 .* 和 ->* 這兩個運算符(注意 ->* 不是單獨的 -> 和 * 並排放的意思),關於爲什麼要發明這兩個運算符,而不能直接說 a ->* b 的意思就是 a ->(*b) ,這個就作爲課堂作業吧。  

【stata基础代码大全 】 可独立完成一篇实证 用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️。八、八.中介效应检验:路径分析(三种方法)第二种方法即Sobel-Goodman检验。*(7)Winsor处理,剔除异常值。六、内生性问题解决方法(附具体模型)其三,工具变量:两阶段最小二乘。第三种方法即Bootstrap检验。二、Stata中数据的基本处理。*(5)生成行业、年度虚拟变量。PSM1————近邻匹配。七、调节效应检验:机制分析。*(2)剔除数据中的样本。*(4)给变量添加标签。*(3)生成新的变量。*(6)基本数据匹配。 阅读详情

相关推荐

基于车牌识别的停车收费系统的设计与实现(源码+开题)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速和汽车保有量的增加,停车难成为了一个普遍存在的问题。传统的停车收费方式存在着效率低下、管理混乱等问题。因此,开发一款基于车牌识别的停车收费系统具有重要的现实意义。研究意义: 基于车牌识别的停车收费系统可以有效地解决传统停车收费方式在效率和准确性方面的问题,提高停车服务的效率和质量。

迟限程序设计 1392

-> 和 . 的区别

.运算符,声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域 了。因为自动分配了结构体的内存,主要用于类类型的对象访问类的成员。 ->主要用于类类型的指针访问类的成员 A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;则要声明一个结构体的指针,还要手动开辟一个该结构体的内存,然后把返回的指...

king9666的博客 6394

Nangate 45nm FreePDK开源工艺库:从RTL到GDSII全流程实战

在数字IC设计中,标准单元库是连接逻辑综合与物理实现的基石,它定义了每个单元的逻辑功能、时序延迟与物理尺寸。开源EDA工具链的成熟,使得个人也能借助免费工艺套件完整跑通芯片设计流程。Nangate 45nm FreePDK作为一套经典的开源工艺库,凭借结构清晰、配套完善的特性,成为学习数字后端和时序收敛的理想训练场。从综合工具Yosys读取Liberty文件进行逻辑映射,到OpenROAD执行布局布线与时钟树综合,再到使用OpenSTA分析关键路径延迟,这套流程涵盖了数字设计最核心的环节。通过亲手操作,开发

weixin_29168393的博客 272

C中->和*.的区别及用法

首先 a->b 的含義是 (*a).b ,所以他們是不同的,不過的確 -> 可以用 * 和 . 實現,不需要單獨一個運算符。 嗯,我這是說現代的標準化的 C 語義上來說, -> 可以用 * 和 . 的組合實現。 早期的 C 有一段時間的語義和現代的 C 的語義不太一樣。 稍微有點彙編的基礎的同學可能知道,在機器碼和彙編的角度來看,不存在變量,不存在 struct 這種東西,只存在寄存器和一個

phenixyf的专栏 1647

Linux Wireless之80211(nl80211, cfg80211, mac80211)

Linux Wireless之80211(nl80211, cfg80211, mac80211)前言在Linux无线子系统中,cfg80211、mac80211和nl80211是三个关键的组件,它们共同工作以实现对802.11设备的配置和管理。cfg80211负责内核空间的通用API,mac80211负责具体的MAC层实现,而nl80211则作为用户空间与内核空间之间的桥梁,用于配置管理和通信。Netlink 是一个 Linux 中的 socket 类型,用于在内核与用户空间之间传递事件。

DD'Notes 1479

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用

介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制

linkedin_38804946的博客 1676

->在c语言中什么含义

点击上方蓝字关注我,了解更多咨询->是一个整体,它是用于指向结构体。1.换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。请看下列图片。2.扩展应用:结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(membe...

轻松学C语言 2万+

双目相机立体匹配算法概述(含Python代码)

立体匹配任务是计算机视觉中的一个重要问题,旨在从一对具有相同场景的图像中估计每个像素的视差(disparity)。本文对现有的传统算法和深度学习算法进行了综述,以便于各位选择合适的立体匹配算法用于深度估计或三维建模。

m0_59257547的博客 8291

C++ 中的“&”、“*”、“.”、“->”、“:”和“::”运算符介绍

C++ 中的“&”、“*”、“.”、“->”、“:”和“::”运算符介绍

cnds123的专栏 3万+

CMOS传输门实战:如何用模拟开关优化你的电路设计(附常见问题排查)

本文深入探讨了CMOS传输门在电路设计中的实战应用与优化策略。文章从核心参数选型入手,详细分析了导通电阻、电荷注入等关键特性对电路性能的影响,并提供了多路复用器构建、精密电路应用等实战架构。同时,重点分享了PCB布局、电源去耦的工程细节,以及开关不导通、信号失真、高频性能不足等常见问题的系统性排查指南,旨在帮助硬件工程师充分发挥CMOS模拟开关的效能,提升电路设计的可靠性与精度。

js777的博客 451

从官方例程到实战:AXI Memory Mapped To PCIe 核在FPGA-RC模式下的配置与调试全解析

本文详细解析了AXI Memory Mapped To PCIe核在FPGA-RC模式下的配置与调试方法。从IP核基础结构到实战参数设置,再到例程代码剖析和调试技巧,全面覆盖了AXI与PCIe协议转换的关键技术点,帮助开发者高效实现FPGA与PCIe设备的高速数据交互。

weixin_42550597的博客 267

C语言中->、.、&、*、**各符号的区别

(1)->和.的区别: 针对结构体类型,.用来访问结构体中的普通变量值; (2)&和*的区别:

qq_39691723的博客 1万+

PY32F406K1CU6 FLASH模拟EEPROM

摘要:本文介绍了基于STM32 FLASH模拟EEPROM的实现方法。头文件flash.h定义了FLASH页大小(256字节)、用户存储区域(4页)及地址范围,提供了等待周期配置和地址校验宏,声明了EEPROM初始化、读写操作等函数接口。源文件flash.c实现了具体功能:配置FLASH等待周期(144MHz需3WS)、页读写擦除操作,以及EEPROM初始化(解锁-擦除-验证-锁定)和缓冲区读写功能。其中写操作采用"读页→更新→擦除→编程"的流程,确保数据安全写入。该方案适用于需要非易失

sam的博客 194

C语言中“.”与“->”有什么区别?

转载:https://farseerfc.me/zhs/dot-and-arrow-in-c.html 原问题:C语言中“.”与“->”有什么区别? 除了表达形式有些不同,功能可以说完全一样阿。那为何又要构造两个功能一样的运算符? 效率有差异?可是现在编译器优化都那么强了,如果真是这样岂不是有些多此一举 刚刚翻了下书,说早期的C实现无法用结构直接当作参数在函数间传递,只能用指向结构的指针在函...

Yannie's Blog 3777

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言--“.”与“->”有什么区别?

这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过。 下面说说我对它们的理解。 一般情况下用“.”,只需要声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域 了。因为自动分配了结构体的内存。如同 int a;一样。 而用“->”,则要声明一个结构体的指针,还要手动开辟一个该结构体的内存,然后把返回的指针...

轮子工厂 7万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【转】C语言中“.”与“->”有什么区别?(详解)

C语言中“.”与“->”有什么区别? 2019年03月15日 09:04:28 五月的天气 阅读数 117 转载:https://farseerfc.me/zhs/dot-and-arrow-in-c.html 原问题:C语言中“.”与“->”有什么区别? 除了表达形式有些不同,功能可以说完全一样阿。那为何又要构造两个功能一样的...

465

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言中的“->”与"."运算符区别

(原文出处:http://www.basncy.com/2011-02-18001) "->"与“."有什么区别呢?课堂上老师这样讲的:一个是地址,一个是引用。话是这么说了,具体怎么理解?而且放到C里面又应该怎么?至少直到现在,我也一直迷惑了两年。刚刚看到下面这段话,明白了。 运算符->是*和.的组合,先对node间接寻址,然后再选择结构成员value,即用node->value=10来代...

深爱尼娜克斯 313

使用VS学习链表时遇到的关于取结构体子数据“.”与“->”区别

今天在学习链表时,看到了一个全新的操作符“->”,发现它是取结构体子数据的操作符 于是产生了一个疑问,“->”与“.”有何区别? 查阅了资料后,发现了叶神在知乎上的回答 由于转载权限原因,这里说一下大义: " 其实这两个操作符差别不大,经过编译器处理后是等价的。在文档中,Member access operators一节中,提到了这两个操作符的差别,“->”左右的两个对象被限定为...

weixin_44749766的博客 598

C语言中“.”与->的区别

写过C语言的各位朋友刚开始的时候一定受过这俩个混淆的坑吧。 看着感觉这俩个差不多啊,都是可以指向一个结构体的元素。但是,往往我们写的时候感觉错误百出: 下面我指出这俩个混淆的错误: 代码附上: 在上图我们看到报错6个地方都是对结构体内元素操作时候出错了: 接下来我们翻一下刚才的报错看是什么原因: error: request for member ‘a’ in something...

q496958148的博客 8727

C语言学习心得:结构体中“.”与“->”有什么区别?

结构体中“.”与“->”有什么区别? 一般情况下用“.”,只需要声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域 了。因为自动分配了结构体的内存。如同 int a;一样。 而用“->”,则要声明一个结构体的指针,还要手动开辟一个该结构体的内存,然后把返回的指针给声明的结构体指针,才能用“->”正确引用。否则内存中只分配了指针的内存,没有分配...

Bill_Hao的博客 1300

php=>与->,PHP中"->"和"=>"的区别

=>不是运算符,这个是数组特有的指针符号..是定义数组时做键、值映射用的。foreach($_POST AS $key=>$value){。。。}遍历数组的时候,就是将$_POST数组的键、值分别赋值给 $key和$value变量。foreach是用来遍历数组的.这个是用来遍历$_POST数组.并把数组的键值放到$key中,值放到$value中...->面向对象的时候用到对象执行...

weixin_42405705的博客 169

#include< >与 #include" "的区别

include< file >编译程序会先到标准函数库中找文件include”file” 编译程序会先从当前目录中找文件参考原文 转: 在C程序中包含文件有以下两种方法: (1)用符号“<”和“>”将要包含的文件的文件名括起来。这种方法指示预处理程序到预定义的缺省路径下寻找文件。预定义的缺省路径通常是在INCLUDE环境变量中指定的,请看下例: INCLUDE=C:\COMPILER\INC

简简简简abc 1940

组件连接/绑定中“->”、“<-”与“=”的区别

在组件的链接绑定中经常可以看到“->”、“ 在介绍三者的区别和联系前,要先介绍下规范元素(程序中的模块和接口等)的外部性(external)和内部性(internal)。其实内部性和外部性是很好理解的:在组建规范(specification)中的规范元素成为外部性规范元素,而把在组件实现(implementation)中的规范元素称为内部性规范元素。举例说明: module a{   pro

eddy_liu的专栏 938

c中"->"与"."的区别

c++中当定义类对象是指针对象时候,就需要用到-> 指向类中的成员;当定义一般对象时候时就需要用到 ". "指向类中的成员....... 例如:class A { public play(); } 如果定义如下: A *p则:p-> pla...

weixin_34362790的博客 87

编程中头文件< >与" "有什么区别

<> 是从系统环境变量指定的目录去搜索你的头文件, 而""首先从当期目录搜索你的头文件,当找不到时才去统环境变量指定的目录搜索。 环境变量是什么意思知道不? 安装vs时它会向你的操作系统注册一个用于指定头文件目录的变量,比如 c:\\program...\...\include

BiuBiu741的博客 1113

liunx中“ >” 与“ &>”,"&>>"的区别

liunx中"&gt;"代表将数据全部定向输入到一个文件内并同时覆盖文件原有内容,文件不存在会创建。是清除原先的内容 用 左边的输出替换之 liunx中“&amp;&gt;" 一般一个搜索命令有标准输出和标准错误输出,也就是”&gt;"和“2&gt;" 这两个的结合体就是 ”&amp;&gt;" 结果就是你输入命令,正确和错误信息都不输出在屏幕上直接输到你重定向的一个文件内,并同时覆盖文件原

yhc166188的博客 1680
上一篇: struct 和 typedef struct
下一篇: 算法导论10.2-5 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
进击的皇阿玛
博客等级 码龄9年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值