C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别
2024-08-27 04:40:21
转自: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;
...
}
最新文章
- 浅析MySQL复制
- Windows 下TortoiseGit 设置避免每次登录帐号密码
- IE9,10中console对象的bug
- 使用SQL如何把用逗号等字符隔开的字符串转换成列表(转)
- k-nearest-neighbor算法
- init.php 建立自己的前端共享文件
- HDU 3966 Aragorn&#39;s Story
- C++ 用libcurl库进行http通讯网络编程(转)
- FindMe
- 关于android 将对象写入文件以及从文件读取对象
- Lattice Diamond安装
- ZOJ问题(坑死了)
- 《.NET 编程结构》专题汇总
- Go学习笔记(一)Let&#39;s 干吧
- 都说 WebP 厉害,究竟厉害在哪里?
- Java 反射实现实体转Map时,父类元素丢失
- UEditor1.2.6.0在.net环境下使用
- showDialog 必须Stateful
- python函数之第一类对象
- C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加
热门文章
- 〖Linux〗让Kubuntu的“启动栏”与Win7“任务栏”的界面和功能一样
- iOS中TableView小技巧
- 如何实现两台Domino之间的相互访问
- Redis从入门到精通:初级篇(转)
- Spring Cloud Eureka集群 动态扩展新节点
- UltraEdit编辑器|UE
- [JavaScript模块演化简史]摘要
- IBatis.Net 视频教程 原创教程
- linux shell 脚本攻略学习20--awk命令入门详解
- Ubuntu下查看软件版本及安装位置【转】