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

一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下《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;

 ...

}

  • 28
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN_项目集管理专家(PgMP)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值