在C语言中,对结构体的访问一般有两种常规方式:"."访问和"->"访问。那么两者有什么区别呢?对C语言有一定了解的同学应该知道,我们新建一个结构体的时候,实际上就是新建了一种数据类型(比如int,char,double都是一种数据类型,只不过这些是C语言自带的数据类型),这是一种什么类型呢?其实,这种结构体的类型就是你命名的类型,譬如下面程序中,我定义的一种结构体:

在这个结构体中,我们定义的就是一种名字为xing的新数据类型。首先让我们利用这个新定义出来的数据类型去定义一些变量(包括普通变量和指针变量)

是不是觉得这样定义怪怪的,其实你觉得怪只是因为你习惯了看int或者double这种常规的数据类型而已,你可以想象一下,如何把上图中的"xing"型结构体类型换成"int chen;int * ting;"就好看多了?习惯而已,的学会适应。

好了,那我们接下来应该去讨论怎么去访问这个数据类型了又或者说是怎么访问这个结构体。

  方法一:采用"."去访问结构体里面的数据。如果我们在使用这个新的数据类型去定义普通变量时,那么我们去初始化这个结构体的元素和读取这个结构体的元素时就应该使用"."去访问。具体的形式如下:

  方法二:采用"->"去访问结构体里面的数据。我们目前知道,除了普通变量,我们还有指针变量。如果说我们使用这个新的数据类型去定义的是指针变量的话,那么我们去访问(初始化和读取数据)这个结构体的时候就应该采用"->"去访问。具体的形式如下:

常规的访问结构体的方法就是这两种了。还有其他方法,我们后续再讨论,下面是我的完整测试程序:

运行的结果:

C语言中结构体的访问方法解读的更多相关文章

  1. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  2. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

  3. 6. Go 语言中结构体的使用

    1. 结构体的定义格式 在go语言中结果的定义格式如下: 123 type structName struct { filedList} 列子如下: 1234 type Person struct { ...

  4. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  5. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  6. Go语言中结构体的使用-第1部分结构体

    1 概述 结构体是由成员构成的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性.结构体成员,也可称之为成员变量,字段,属性.属性要满足唯一性.结构体的概念在软件工程上 ...

  7. 关于C语言中结构体中的结构体成员导致的字节对齐问题

    关于结构体的字节对齐是什么,就不赘述,再此附上一篇文章,介绍字节对齐:http://www.linuxsong.org/2010/09/c-byte-alignment/ 这里的结构体字节对齐的数据类 ...

  8. C语言中结构体參数变量的传递

    [文章摘要] 在C语言中,结构体參数变量常常作为函数的參数来进行传递.但假设參数设置不当.会出现内存问题. 本文以实际的程序代码为例.具体地介绍怎样正确地使用结构体參数变量.为相关的开发工作提供了參考 ...

  9. C语言中结构体变量之间赋值

    近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...

随机推荐

  1. C#中的多线程 - 多线程的使用 z

    原文:http://www.albahari.com/threading/part3.aspx 专题:C#中的多线程 1基于事件的异步模式Permalink 基于事件的异步模式(event-based ...

  2. angular2 遗留问题

    1.angular build [2017-07-26]  a.改写js/css的引用目录的前缀(比如统一增加 /abc/xxx/*.js)  b.build时,可以控制index/js/css的生成 ...

  3. vs2017 git到oschina 方法

    vs2017中git基本使用方法: 1.开发环境vs2017,git服务器使用git.oschina.net 2.打开vs2017 创建项目 如果已有项目则: 3.完成后在文件前面会有小锁的图标,说明 ...

  4. SecurityError: The operation is insecure.(js不安全操作)

    今天突然就遇上了这样的情况,本来在出错的这一行的后面,还有要执行的语句,都没有办法执行,真实坑爹,而最要命的事情,这样的情况,在我的chrome浏览器里没有,但是在firefox里就会出现. The ...

  5. getResource和getResourceAsStream

    1. 前言 在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异. 2.Class.getResource(St ...

  6. 截取Excel字符串的部分字符

    截取Excel字符串的部分字符 我们可以使用Mid.Left.Right等函数从长字符串内获取一部分字符.  ①LEFT函数:  LEFT(text,num_chars)  Text是包含要提取字符的 ...

  7. 关于HiddenHttpMethodFilter

    这个类的代码比较少,所以把整个类的代码都复制过来.在注释中添加上自己的理解. public class HiddenHttpMethodFilter extends OncePerRequestFil ...

  8. redis持久化那些事(kēng)儿

    这是一篇包含了介绍性质和吐槽性质的日志.主要介绍一下我学习redis持久化时候被坑的经历.redis的使用介绍现在没有打算写,因为比较多,以我如此懒的性格...好吧,还是有点这方面想法的,不过一篇博客 ...

  9. Python机器学习神器:sklearn&numpy

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDE0MDMzOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  10. 「LG4178 Tree」

    题目 我终于来抄点分治的板子了 随便说一点理解吧,点分治就是一种能求某种特定树上路径数量的算法 就是选择一个分治重心,统计一下以这个重心为\(LCA\)的路径的信息 之后对这个重心的子树再次分别选择分 ...