转自: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;

...

}

最新文章

  1. 浅析MySQL复制
  2. Windows 下TortoiseGit 设置避免每次登录帐号密码
  3. IE9,10中console对象的bug
  4. 使用SQL如何把用逗号等字符隔开的字符串转换成列表(转)
  5. k-nearest-neighbor算法
  6. init.php 建立自己的前端共享文件
  7. HDU 3966 Aragorn&#39;s Story
  8. C++ 用libcurl库进行http通讯网络编程(转)
  9. FindMe
  10. 关于android 将对象写入文件以及从文件读取对象
  11. Lattice Diamond安装
  12. ZOJ问题(坑死了)
  13. 《.NET 编程结构》专题汇总
  14. Go学习笔记(一)Let&#39;s 干吧
  15. 都说 WebP 厉害,究竟厉害在哪里?
  16. Java 反射实现实体转Map时,父类元素丢失
  17. UEditor1.2.6.0在.net环境下使用
  18. showDialog 必须Stateful
  19. python函数之第一类对象
  20. C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加

热门文章

  1. 〖Linux〗让Kubuntu的“启动栏”与Win7“任务栏”的界面和功能一样
  2. iOS中TableView小技巧
  3. 如何实现两台Domino之间的相互访问
  4. Redis从入门到精通:初级篇(转)
  5. Spring Cloud Eureka集群 动态扩展新节点
  6. UltraEdit编辑器|UE
  7. [JavaScript模块演化简史]摘要
  8. IBatis.Net 视频教程 原创教程
  9. linux shell 脚本攻略学习20--awk命令入门详解
  10. Ubuntu下查看软件版本及安装位置【转】