C语言里`.`和`->`的区别

C语言里.->的区别

今天写代码时,遇到一个很明显,但是困住我这个小白的错误:

...错误:在非结构或联合中请求成员‘data’
switch_core_file_write(rh->fh, mask ? null_data : rnnoise_clone.data, &len)

很明显是rnnoise_clone.data用错了。为什么呢?

首先看一下定义:
->->是C语言和C++语言的一个运算符,叫做指向结构体成员运算符,用处是使用一个指向结构体或对象的指针访问其内成员。(引用自百度百科什么是“->”

..并不是一个运算符,它只是一个断点符号,它指向的是结构体或者对象。

好吧,看完定义并没有看明白。下面我们来翻译一下:

->是通过一个结构体或对象指针来访问他们的内部成员变量;
.是直接通过结构体或对象来访问他们的内部成员变量。

在网上找到一个很便于记忆的方式:

a->b读作a指向结构体的b
a.b读作a的b

区别总结

那么区别就显而易见了,->前面肯定是结构体指针或对象指针;.前面的是一个结构体或对象。

下面我们通过代码直观的了解一下:

switch_frame_t frame = { 0 };
switch_frame_t *rnnoise_clone;

frame.data = data;		//OK,因为frame是一个switch_frame_t的结构体
rnnoise_clone->data = data;		//OK,因为rnnoise_clone是一个switch_frame_t类型的结构体指针

为什么会这样?

其实两者的作用是一样的,那么为什么会重复制造轮子呢?

翻了一下书,找了几个网站,觉得最能说服我的就是这句话了:

早期的C语言不支持将结构体作为参数在函数之间传递,只能用指向结构的指针在函数间进行传递。

emmm

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值