既然结构体是一种数据类型,那么除了使用变量本身来访问结构体之外,也可以使用指针来访问结构体。下面通过一个简单的例子来演示一下:

struct Date{int year;int month;int day;};struct book{char title[30];char author[30];float value;struct{int year;int month;int day;};};

  首先声明一个结构体,这里用结构体来存储书本的信息,包括书本的标题、作者、价格、出版日期。其中出版日期也是一个结构体,这里声明出版日期时使用的是匿名结构声明,没有具体的结构名称。它嵌套在书本结构体中。接下来初始化结构体。

struct book books={"语文","张三",19.8,{2021,10,1}};struct book *bks;bks = &books;

  定义了一个结构体变量books,在定义的时候直接初始化。接着定义了结构体指针,将books的地址赋值给指针。这里要注意一下,结构体的变量名并不是结构体的指针,所以在给指针赋值的时候,必须要使用取值运算符&来获取结构体变量的指针。接下来就可以使用指针来访问结构体的成员了。

printf("%s %s %f %d-%d-%d\r\n",books.title,books.author,books.value,books.year,books.month,books.day);printf("%s %s %f %d-%d-%d\r\n",(*bks).title,(*bks).author,(*bks).value,(*bks).year,(*bks).month,(*bks).day);printf("%s %s %f %d-%d-%d\r\n",bks->title,bks->author,bks->value,bks->year,bks->month,bks->day);

  这里使用了三种不同的方式来访问结构体的成员,第一种是直接通过变量加点号的方式来访问具体的成员。虽然日期信息也是一个结构体,但是由于它是匿名的,所以通过变量名加点的方式也可以直接访问到日期成员的信息。如果日期结构体不是匿名的,那么访问日期的时候,就必须使用两次点号才能访问到。

  第二种是通过指针来访问具体对象,由于 bks = &books ,那么 *bks = books,因为 & 和 * 是一对互逆运算符,所以可以做如下的替换:

books.title == (*bks).title

  这里的 *bks 必须要加圆括号,因为 . 运算符的优先级比 * 运算符优先级高。如果不加圆括号就相当于 *(bks.title),这里一定要记得加括号。

  第三种方法是用指针访问结构体的最常用方法,使用 -> 运算符,指向结构体指针的后面加 -> 运算符和变量后面加 . 运算符的是等效的。

books.title == bks->title

  这个和第二种指针的用法也是等效的。

books.title == (*bks).title == bks->title

  通过三种不同的方法来访问结构成员,输出结果如下:

  通过打印的结果也可以看出,这三种方式访问具体的对象是等效的。

C语言学习笔记---结构体指针相关推荐

  1. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  2. C语言学习笔记---结构体中的字符数组和字符指针

      在结构体中可以使用字符数组来存储字符串,也可以使用字符指针来存储字符串.比如: struct str{char s1[5];char s2[5];};struct str str1= {" ...

  3. C语言学习笔记---结构体的定义和初始化

      在C语言中结构体通常用来将不同类型的变量打包在一起,方便对对象的统一管理. 结构体定义   要使用结构体时,首先要进行结构体的声明.声明的形式如下: struct 结构体名{ 结构体所包含的变量} ...

  4. Go语言学习笔记——结构体中使用tag标记

    文章目录 golang结构体中使用tag标记 简介 语法结构 快速入门 常见应用 应用json编码 应用xml编码 应用form表单绑定 gin框架form和数据绑定 golang结构体中使用tag标 ...

  5. C语言学习笔记---结构体作为函数参数和返回值

      结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...

  6. C语言学习笔记---结构体数组初始化

      既然结构体是一种数据类型,那么它也可以定义为数组的形式.比如要描述一本书的信息,可以将书的名称,作者,价格这些信息用一个结构体来描述,在使用的过程中不可能只描述一本书,所以就需要使用一个结构体数组 ...

  7. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

  8. c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  9. go语言学习:结构体

    结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 1.1. 类 ...

最新文章

  1. python项目-你肯定想学习的顶级Python项目(附代码)
  2. hdu3786 找出直系亲属 水题
  3. Java selenium 获取表格数据_Selenium Webdriver如何通过获取Excel输入从表中选择记录...
  4. shader 获取法线_Unity Shader 入门到改行5——法线贴图
  5. 财富:鲍尔默时代的微软一直在走下坡路
  6. 【操作系统】—处理机调度的概念以及层次
  7. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法
  8. Tcl Tutorial 笔记 ·ubuntu命令行运行tcl 命令
  9. C++ 从入门到入土(English Version)Section 8 : Recursion, Searching and Backtracking
  10. 研磨设计模式学习笔记3--适配器模式Adapter
  11. 【爬虫】链接二手房信息爬取
  12. 计算机excel无法打开,电脑excel打不开的解决方法
  13. 【操作系统原理-陈渝老师】第七章 进程与线程
  14. IP-Guard准入控制网关实现机制
  15. 移动端H5页面关于软键盘的一些踩坑记录
  16. 稠密的无人机激光雷达点云数据处理与分析方法与工具科普系列(一)
  17. 牛客练习赛85-哲学家的沉思-(上升子序列变形+树状数组+线段树+离散化+set)
  18. elasticsearch(ES)的安装部署及其插件安装
  19. (转载)[python学习笔记]Python语言程序设计(北理工 嵩天)
  20. Python | 使用 Python 分析《我不是药神》豆瓣电影短评

热门文章

  1. CCNA 学习笔记(七)--交换知识(VLAN VTP TRUNK)
  2. sql server 性能分析工具
  3. PDFlib使用实例
  4. 制作了一个WMI 查询分析工具
  5. scrapy_redis项目配置
  6. selenium IDE的基本命令
  7. [PTA] 数据结构与算法题目集 6-10 二分查找
  8. css3之背景属性之background-size
  9. EasyPlayer Android RTSP播放器延迟再优化策略
  10. 用Org-mode实践《奇特的一生》