结构体的(.)操作符和(->)操作符区别

一、结构体的 . 操作符
二、结构体的 -> 操作符
三、点操作符的优先性和结合性
四、总结

一、结构体的 .操作符

1.结构体成员的直接访问:结构体变量的成员是通过操作符 . 访问的。

二、结构体的->操作符

1.结构体成员的间接访问:当我们拥有一个 指向结构体的指针 ,我们访问这个结构的成员的方式是 对指针执行间接访问操作
然后再通过 点操作符 访问其成员。但是 点操作符 的优先级大于 间接访问操作符,因此需要使用括号,确保间接访问先进行。
即访问指向结构体的指针需要通过间接访问来进行

例子:

struct complex
{  float f;};
void func(struct conmplex* cp);

函数可以使用如下表达式来进行访问 f
(* cp).f ———— 即通过此方式来进行访问结构体中的成员f

对指针进行 间接访问 将访问结构体,再用点操作符访问其成员。
由于该概念不是很方便,于是C语言提供了一个更为方便的操作符来完成这项工作———— ->操作符(也成箭头操作符)
和点操作符一样,箭头操作符接收两个操作数,但左操作数必须是一个指向结构体的指针
cp->f 等同于 (* cp).fs

三.点操作符的优先性和结合性:

从下表中我们可以看出其优先性是和[]相同的,结合性是从左到右的。
结构体的(.)操作符和(->)操作符区别

struct simple{
  int a;
  char b;
  float c;
};
 struct complex{
   struct simple s;
   struct simple sa[10];
 };

于是当如下使用该操作符时:
(comp.s).a 等同于 comp.s.a
((comp.sa)[4]).c 等同于 cmp.sa[4].c

四、总结

访问结构体成员时,我们采用直接访问的方式进行访问,即使用 点操作符 进行访问,
访问结构体指针时,我们采用的是间接访问的方式进行访问,即使用 箭头操作符进行访问。

原文链接:https://www.cnblogs.com/zzao/p/17181392.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:结构体的(.)操作符和(->)操作符区别 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • Win11系统遇到BSOD错误代码0xc0000001怎么办 附图文修复教程

    当 Win11 系统遇到 BSOD 错误代码 0xc0000001 的时候,这意味着操作系统自举的过程中发生了错误。这种错误可能是由于硬件故障、软件冲突、缺失关键系统文件等多种原因引起的。 下面是对此问题的解决攻略: 步骤一:检查硬件连接 首先,确保 Win11 计算机的每个硬件部件都正确连接。此外,请确保所有硬件部件都处于工作状态并适当地供电。如果其中某一…

    C 2023年5月23日
    00
  • c_str()的用法详细解析

    c_str()的用法详细解析 简介 c_str() 是C++中的字符串处理函数,用于将C++的字符串对象转换为C语言的字符串(也称为字符数组)。 在C++的标准库中,字符串类型有多种,其中比较常见的有 std::string。而在一些需要使用C语言字符串(字符数组)的场合,需要使用c_str()函数将字符串对象转换成字符数组。 语法 const char* …

    C 2023年5月22日
    00
  • 如何用C代码给Python写扩展库(Cython)

    下面我将给你详细讲解如何用C代码给Python写扩展库(Cython)的完整攻略,包含两个示例说明。 1. 环境准备 首先,我们需要安装一些工具和库来进行扩展库的开发: C语言编译器: Windows系统:可以使用Mingw-w64或者Visual Studio等 Linux系统:通常已经默认安装了gcc Python开发环境: Python 2.7和3.x…

    C 2023年5月23日
    00
  • premiere新手常用之十大快捷键介绍

    Premiere新手常用之十大快捷键介绍 本篇文章将会介绍premiere新手常用的十大快捷键,帮助读者提高工作效率。以下是具体介绍: 1. 快速播放 按下空格键即可快速播放或暂停媒体文件,再按空格键将会继续播放,这是最基本的快捷键。 2. 快速剪辑 按下两次快进或快退键(通常是快捷键”L”和”J”),可使视频“蹦跳”至下一个或上一个edit point时间…

    C 2023年5月22日
    00
  • C语言内存管理及初始化细节示例详解

    C语言内存管理及初始化细节示例详解 1. 内存管理 C语言是面向过程的编程语言,在内存管理上需要程序员手动管理内存。我们使用变量进行部分数据存储,而变量在程序运行时是存在内存中的。因此,我们需要掌握如何在内存中操作我们的变量。在使用变量时,需要注意以下方面: 1.1 变量的生命周期 变量的生命周期是指这个变量在程序运行中被创建和销毁的时间段。变量创建会在内存…

    C 2023年5月23日
    00
  • C++简单集合类的实现方法

    C++简单集合类的实现方法 什么是集合类? 集合类是数据结构中的一种,用来存储一组相同类型的数据项。集合类可以快速的对其中的数据进行添加、删除、查找、排序等操作。在C++中,STL中的集合类就是其中之一。 集合类实现原理 在实现一个集合类时,我们可以使用数组、链表、哈希表等数据结构。不过,在这里我们使用了一个常用的数据结构:红黑树。 红黑树是一种自平衡二叉搜…

    C 2023年5月23日
    00
  • 栈(顺序)的实现:括号的解析

    一、问题引入 在学习栈的过程中,教材有一个案例:利用栈结构解析括号的匹配问题。括号问题:[({}{})],说明 [] 、() 、{} 称为一对且满足就近匹配。 号码位置对应的括号之间进行匹配,结果:0-7、 1-6、 2-3、 4-5 源码链接https://github.com/caojun97/Bracket_Match 二、过程记录 2-1 栈的介绍 …

    C语言 2023年4月18日
    00
  • c++如何保存vector到文件

    下面我将为您详细讲解C++如何保存vector到文件。 1. 使用文件流将vector对象保存到文件中 我们可以使用C++的文件流(fstream)来将vector对象保存到文件中。具体步骤如下: 引入头文件#include 打开文件,可以使用ofstream类的构造函数来打开文件,并指定打开方式、文件名等信息。如下: std::ofstream ofs(&…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部