首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ptr->thing和*ptr->thing在C中有什么不同?

在C语言中,ptr->thing和*ptr->thing都是指针操作符的组合,用于访问结构体或联合体中的成员。它们的区别在于运算符的优先级和结合性。

  1. ptr->thing:这是一个结构体指针操作符,用于访问指针所指向的结构体中的成员。首先,ptr会被解引用为一个结构体指针,然后使用箭头运算符->来访问结构体成员。例如,如果有一个结构体指针ptr指向一个结构体,可以使用ptr->thing来访问结构体中名为thing的成员。
  2. ptr->thing:这是一个指针的结构体成员操作符,用于访问指针所指向的结构体成员的指针。首先,ptr会被解引用为一个结构体指针,然后使用点运算符.来访问结构体中名为thing的成员,最后使用解引用运算符来获取该成员的值。例如,如果有一个结构体指针ptr指向一个结构体,可以使用*ptr->thing来获取结构体中名为thing的成员的值。

这两种操作符的使用场景取决于结构体或联合体的定义和需要访问的成员类型。ptr->thing适用于直接访问结构体成员,而*ptr->thing适用于访问结构体成员的指针。

在腾讯云的产品中,与C语言相关的云计算产品包括云服务器CVM、云数据库CDB、云存储COS等。您可以通过以下链接了解更多信息:

  1. 云服务器CVM:提供可扩展的计算能力,支持多种操作系统和应用场景。了解更多:https://cloud.tencent.com/product/cvm
  2. 云数据库CDB:提供高性能、可靠的数据库服务,支持多种数据库引擎和数据复制方式。了解更多:https://cloud.tencent.com/product/cdb
  3. 云存储COS:提供安全可靠的对象存储服务,适用于存储和处理大规模的非结构化数据。了解更多:https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ Qt开发:TableView与TreeView组件联动

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableView...在函数中我们需要定义一个QStandardItemModel模型,这个模型的作用在之前的文章中有具体介绍,它是一个灵活且功能强大的模型类,适用于需要自定义数据结构、支持编辑、表头等功能的场景。...上述方法提供了管理选择项的一些基本操作,包括清除选择、获取选中项的索引、设置选择模式和策略,以及在指定范围内进行选择操作。...在MainWindow构造函数中,我们以此执行如下关键部分,来实现对主界面的初始化工作;创建模型和选择模型首先创建一个包含4行5列的 QStandardItemModel 模型,并为其创建了一个 QItemSelectionModel...在如下代码中我们通过model->rowCount()以及model->columnCount()获取到父UI界面中tableView表格的行列数,并通过ptr->setRowColumn将这些数据设置到了子对话框的编辑框上面

43010
  • 对象引用和对象指针

    那*ptr->print()对吗,*ptr和ptr的意思是一样的吗 *ptr->print() 是不正确的。ptr->print() 是正确的写法,它等价于 (*ptr).print()。...因此,ptr 和 *ptr 的意思是不同的。 当你想通过指针访问对象的成员时,可以使用 -> 运算符。...为什么对象指针需要解引用,而对象引用就不需要 对象指针和对象引用的工作方式不同。对象指针存储的是对象的地址,而不是对象本身。...->get() 所以有了运算符相当于写法上省了中间这一步 那运算符到底放在什么位置呢 有的人这样写int *a,有的人写成int* a 之所以出现差异C++是因为 C 之上添加了更强大的类型系统。...C++风格 而C++程序员在“类型”中思考 int* pValue; 读取“pValue 的类型是指向 int 的指针”。 当然,编译器完全没有看到任何区别。

    7710

    C语言进阶-文件操作超详解

    目录 为什么使用文件 什么是文件 分类(从文件功能的角度) 文件名 文件的打开和关闭 文件指针 fopen和fclose函数 打开方式表 文件的顺序读写 顺序读写函数表 什么是输入输出流 fgetc/fgetc...文件操作各种函数的基本使用 为什么使用文件 ---- 在前前篇文章中我们写了通讯录,拥有文件操作功能的通讯录可以让数据持久化 即在通讯录下一次运行时,在通讯录中我们之前所录入的数据依然存在...建立一个新的文件 “ab+” (读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件 示例: /*...= EOF) // 标准C I/O读取文件循环   {       putchar(c);   } //判断是什么原因结束的    if (ferror(fp))        puts("...,也会刷新缓冲区 pf = NULL; return 0; } 结论: C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件(如果不做,可能导致数据丢失)

    1K20

    1.12 进程注入ShellCode套接字

    本章的内容其原理与《运用C语言编写ShellCode代码》中所使用的原理保持一致,通过动态定位到我们所需的网络通信函数并以此来构建一个正向Shell,本章节内容对Metasploit工具生成的Shell...通过使用socket,程序员可以在不同的计算机之间进行通信。读者可以将两者理解为一个意思。...基地址 = %x \n", msgbox); msgbox(0, ptr->Text, 0, 0); } 最后我们来看一下在主函数中我们需要做什么,在主函数中通过GetProcAddress函数分别得到我们所需要的函数入口地址...ASLR可以在操作系统内核、编译器和二进制代码等多个层面实现,如在编译时生成随机堆栈和堆地址、加载时随机化内存基地址等。 这两种技术都可以增强操作系统的安全性,防止恶意代码的攻击和利用。...则自然就具备了网络通信的能力,如下图所示; 此时读者可下载32位版本的NC,通过使用执行命令nc [远程IP地址] [端口]连接到进程内部; 小提示:Netcat是一款网络工具,也称为nc工具,可以在不同的计算机之间进行数据传输

    24940

    【c++丨STL】list模拟实现(附源码)

    与vector、string不同,由于list的底层是一个双向带头循环链表,所以它的实现上要更加复杂。...节点 和传统的双向带头循环链表相同,节点当中有一个数据域用于存放数据;两个指针分别指向前驱节点和后继节点。 我们需要实现节点的默认构造函数,便于容器构造节点。...为什么要这样设计呢?其实这样做的目的是为了提高代码复用率。如果我们创建了一个list普通对象和一个const对象,那么使用它们的迭代器时,相对应就会有普通迭代器和const迭代器。...这是为什么呢?这其实和c++的语法规定有关。当我们使用该运算符重载时,要访问到数据的成员,原本应该这样写:迭代器 ->-> 成员。...insert和erase insert的逻辑和我们c语言实现双向链表时大体相同(在pos位置之前插入),注意插入元素后,pos指向的不再是原本需要插入的位置,迭代器失效,所以函数要返回新插入的节点的迭代器

    9910

    1.12 进程注入ShellCode套接字

    本章的内容其原理与《运用C语言编写ShellCode代码》中所使用的原理保持一致,通过动态定位到我们所需的网络通信函数并以此来构建一个正向Shell,本章节内容对Metasploit工具生成的Shell...通过使用socket,程序员可以在不同的计算机之间进行通信。读者可以将两者理解为一个意思。...(0, ptr->Text, 0, 0);}最后我们来看一下在主函数中我们需要做什么,在主函数中通过GetProcAddress函数分别得到我们所需要的函数入口地址,并通过调用strcpy函数分别将所需参数写出到...ASLR可以在操作系统内核、编译器和二进制代码等多个层面实现,如在编译时生成随机堆栈和堆地址、加载时随机化内存基地址等。这两种技术都可以增强操作系统的安全性,防止恶意代码的攻击和利用。...,则自然就具备了网络通信的能力,如下图所示;图片此时读者可下载32位版本的NC,通过使用执行命令nc [远程IP地址] [端口]连接到进程内部;小提示:Netcat是一款网络工具,也称为nc工具,可以在不同的计算机之间进行数据传输

    33840

    (超级清晰易懂版)多态--C++

    编译时多态(静态多态)主要就是我们前面讲的函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时一般归为静态...⼤家要结合类似下面的样例才能明白,为什么基类中的析构函数建议设计为虚函数。...ptr->BuyTicket(); } int main() { // 其次多态不仅仅发⽣在派⽣类对象之间,多个派⽣类继承基类,重写虚函数后 // 多态也会发⽣在多个派⽣类之间。...// 这⾥就是静态绑定,编译器直接确定调⽤函数地址 ptr->BuyTicket(); 00EA2C91 mov ecx,dword ptr [ptr] 00EA2C94 call Student::...• 派生类由两部分构成,继承下来的基类和自己的成员,一般情况下,继承下来的基类中有虚函数表指针,自己就不会再生成虚函数表指针。

    5400

    CC++ Qt ListWidget 增加右键菜单

    在上一篇博文《C/C++ Qt ListWidget 列表框组件应用》中介绍了ListWidget组件的基本使用技巧,本次将给ListWidget组件增加一个右键菜单,当用户在ListWidget组件中的任意一个子项下右键...,我们让其弹出这个菜单,并根据选择提供不同的功能。...// 全局下设置增加菜单 QAction *NewAction; QAction *InsertAction; QAction *DeleteAction; 其次则是通过代码的方式在程序中动态创建一个基础的右键菜单...ptr->addAction(DeleteAction); // 在鼠标光标位置显示右键快捷菜单 ptr->exec(QCursor::pos()); // 手工创建的指针必须手工删除...ptr->addAction(DeleteAction); // 在鼠标光标位置显示右键快捷菜单 ptr->exec(QCursor::pos()); // 手工创建的指针必须手工删除

    99521

    【C++】多态

    编译时多态(静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的 函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,...final关键字 从上⾯可以看出,C++对函数重写的要求⽐较严格,但是有些情况下由于疏忽,⽐如函数名写错参数写 错等导致⽆法构成重载,⽽这种错误在编译期间是不会报出的,只有在程序运⾏时没有得到预期结果才来...纯虚函数和抽象类 在虚函数的后⾯写上 =0 ,则这个函数为纯虚函数,纯虚函数不需要定义实现(实现没啥意义因为要被 派⽣类重写,但是语法上可以实现),只要声明即可。...// 这⾥就是静态绑定,编译器直接确定调用函数地址         ptr->BuyTicket(); 00EA2C91 mov       ecx, dword ptr [ptr]  // 将ptr...派⽣类由两部分构成,继承下来的基类和⾃⼰的成员,⼀般情况下,继承下来的基类中有虚函数表 指针,⾃⼰就不会再⽣成虚函数表指针。

    6000

    复习C++&笔记

    类与对象 1、静态成员函数没有this指针,静态成员变量可以通过classname::或object.调用,声明非常量静态成员时,需要在类中加static前缀但不能定义或初始化,在类外定义和初始化但不能再加...4、this指针只在成员函数里有定义,创建一个对象后不能直接取得this指针的位置。 5、构造函数可以有参数,析构函数没有参数,他们都没有返回值。...6、struct和class和union都可以用来定义对象,但struct默认全部公有,class默认全部私有。...虚基类解决了多继承中父类存在多个共同基类实例的问题(非虚继承的情况下,如B、C继承A,D继承B、C,则D型对象继承了B-A和C-A两个不同的基类),从而共享A的数据成员。...10); ptr=&a; coutptr->total()<<endl; ptr=&b; coutptr->total()<<endl; ptr=&c;

    42930

    C++ —— 关于多态

    (静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的 运⾏...ptr->BuyTicket(); } int main() { // 其次多态不仅仅发⽣在派⽣类对象之间,多个派⽣类继承基类,重写虚函数后 // 多态也会发⽣在多个派⽣类之间。...// 这⾥就是静态绑定,编译器直接确定调⽤函数地址 ptr->BuyTicket(); 00EA2C91 mov ecx,dword ptr [ptr] 00EA2C94 call Student...::Student (0EA153Ch) 4.4 虚函数表 基类对象的虚函数表中存放基类所有虚函数的地址(同类型对象虚表共用,不同类型对象虚表各自独立) 派⽣类由两部分构成,继承下来的基类和⾃⼰...的成员,⼀般情况下,继承下来的基类中有虚函数表指针,⾃⼰就不会再⽣成虚函数表指针。

    6300

    【Leetcode -142.环形链表Ⅱ -143.重排链表】

    示例 1: 输入:head = [3, 2, 0, -4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。...示例 2: 输入:head = [1, 2], pos = 0 输出:返回索引为 0 的链表节点 解释:链表中有一个环,其尾部连接到第一个节点。...我们的思路是,如下图,a为没进入环的长度,即环的外部,b+c则是环的长度,b是slow进入环之后,与fast相遇前走的长度;假设fast与slow相遇时,fast已经在环内走了n圈,则fast走的路程为...:n*(b+c)+a+b;又因为fast每次走两步,slow每次走一步,所以fast = 2slow,而在相遇时slow走的路程是:a+b;所以有 :n * (b+c) + a + b = 2 * (a...+b), 化简后得:a = n * (b+c) - b,可以理解为 n 圈减去 b 的长度,即为 c 的长度,所以a = c;所以我们可以在fast与slow相遇时定义一个ptr指针从头开始走,它和slow

    11110
    领券