转自:http://blog.csdn.net/taric_ma/article/details/7397362

一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下《C语言核心技术》,明白了其中的奥妙。

相同点:两个都是二元操作符,其右操作符是成员的名称。

不同点:点操作符左边的操作数是一个“结果为结构”的表达式;

箭头操作符左边的操作数是一个指向结构的指针。

举例说明:

#include <string.h>

Song_t  song1,song2,                        //两个Song_t类型的对象

*pSong = &song1;              //和一个指向Song_t的指针

strcpy(song1.composer,"Ottma Liebert");

song1.duration = 251;

song1.published.year = 1998;

if((*pSong).duration >180)

printf("The song is more than 3 mimutes long.\n");

--最后一句也可以改写为:

if(pSong->duration > 180) ....

另外一点体会:如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。

int  iSetValue(Song_t *pSong)

{

strcpy( pSong ->composer,"123");

pSong->duration = 251;

...

}

C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别的更多相关文章

  1. (C语言)结构体成员的引用->(箭头)和 .(点)

    关于结构体成员的引用有这样的规律: 箭头(->):左边必须为指针: 点号(.):左边必须为实体. 那么如果一个结构体指针引用一个成员,这个成员又是一个结构体(并且是一个实体),那么如果要引用这个 ...

  2. C语言根据结构体成员变量的地址,得到结构体的地址

    看nginx代码时发现双链表使用的是这种方法,记录一下 给出一个实例来说明 struct father_t {    int a;    char *b;    double c;}f;char *p ...

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

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

  4. 【C语言】这种求结构体成员大小的方法,你可能需要了解一下~

    在C语言编程中,有时候需要知道某结构体中某成员的大小,比如使用堆内存来存储结构体中的某成员时,需要知道该成员的大小,才好确定所需申请的空间大小.求某结构体中某成员的大小,你会怎么做? 例子: type ...

  5. C语言中访问结构体成员时用‘.’和‘->’的区别

    举个例子,定义了一个叫Student,别名为stu的结构类型,我们声明了一个结构体变量叫stu1,声明了一个结构体指针为stuP. typedef struct Student { char name ...

  6. go语言基础之结构体成员的使用指针变量

    1.结构体成员的使用:指针变量 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct ...

  7. go语言基础之结构体成员的使用普通变量

    1.结构体成员的使用普通变量 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { ...

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

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

  9. ios开发中的C语言学习—— 结构体简介

    在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来 ...

随机推荐

  1. 〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”

    有时候给别人分享一个工具的时候,同时需要提供的文件比较多: 如果分享一个压缩包还得教会对方如何解压.执行哪个脚本,感觉需要传输的内容多了就不方便: 把几个Shell脚本和文件打包成一个“单独的可执行文 ...

  2. Linux之压缩与解压缩

    一.解压缩: tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar. ...

  3. mysql从时间字符串中取出日期数据

    addtime='2016-09-03 18:12:44' substr(addtime,1,10)  as 创建日期 SUBSTR(string, string charcter, number o ...

  4. everything基于Windows平台快速搜索文件

    在Windows搜索文件,自带的搜索效率很低.高效.速度是你忠心的选择... 速度真是杠杠的 下载: http://www.voidtools.com/downloads/ https://files ...

  5. Newifi2(D1) 刷入pb-boot和breed的记录

    今天要给一个newifi d1刷系统时发现居然还是原厂的uboot, 使用uboot刷入rom时会进行校验拦截第三方的rom. 之前有刷过这个设备的, 但是已经完全记不清怎么处理的了. 查了一下, 这 ...

  6. Ubuntu x86-64汇编(6)

    寻址方式 Addressing Modes 地址和值 Addresses vs Values 在64bit架构中, 地址是64bit. 访问内存内容的唯一方式就是通过方括号, 不加方括号读取的只是地址 ...

  7. I2C 12864OLED的工作机制

    有许多不同规格的OLED显示屏与Arduino兼容, 128x64是最常见的型号, 也很便宜, 淘宝上大概是12~14元一片. OLED与Arduino的通信 首先, 使用I2C总线的设备, 都可以使 ...

  8. javascript 的 jasmine 的測试语句

    首先建立环境场景: 一般三个文件夹 lib jasmine的系统文件存放文件夹 spec 写測试用例的文件夹 src 存放源码的文件夹(被測对象) specRunner.html 測试入口文件. 入口 ...

  9. Anroid 4大组件之android.app.Service

    android.app.Service A Service is an application component representing either an application's desir ...

  10. 【centos6】安装redis + phpredis 以及 常用配置参数

    1.redis-server和redis-cli安装文章:http://www.cnblogs.com/skyessay/p/6429988.html 1.前置条件:查看是否安装gcc,命令:gcc ...