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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宋宝华嵌入式 C/C++语言精华文章集锦 C/C+语言 struct 深层探索 ............................................................................2 C++中 extern "C"含义深层探索........................................................................7 C 语言高效编程的几招...............................................................................11 想成为嵌入式程序员应知道的 0x10 个基本问题 .........................................................15 C 语言嵌入式系统编程修炼...........................................................................22 C 语言嵌入式系统编程修炼之一:背景篇 ............................................................22 C 语言嵌入式系统编程修炼之二:软件架构篇 ........................................................24 C 语言嵌入式系统编程修炼之三:内存操作 ..........................................................30 C 语言嵌入式系统编程修炼之四:屏幕操作 ..........................................................36 C 语言嵌入式系统编程修炼之五:键盘操作 ..........................................................43 C 语言嵌入式系统编程修炼之六:性能优化 ..........................................................46 C/C++语言 void 及 void 指针深层探索 .................................................................50 C/C++语言可变参数表深层探索 .......................................................................54 C/C++数组名与指针区别深层探索 .....................................................................60 C/C++程序员应聘常见面试题深入剖析(1) ..............................................................62 C/C++程序员应聘常见面试题深入剖析(2) ..............................................................67 一道著名外企面试题的抽丝剥茧 ......................................................................74 C/C++结构体的一个高级特性――指定成员的位数 .......................................................78 C/C++中的近指令、远指针和巨指针 ...................................................................80 从两道经典试题谈 C/C++中联合体(union)的使用 ......................................................81 基于 ARM 的嵌入式 Linux 移植真实体验 ................................................................83 基于 ARM 的嵌入式 Linux 移植真实体验(1)――基本概念 ...........................................83 基于 ARM 的嵌入式 Linux 移植真实体验(2)――BootLoader .........................................96 基于 ARM 的嵌入式 Linux 移植真实体验(3)――操作系统 ..........................................111 基于 ARM 的嵌入式 Linux 移植真实体验(4)――设备驱动 ..........................................120 基于 ARM 的嵌入式 Linux 移植真实体验(5)――应用实例 ..........................................135 深入浅出 Linux 设备驱动编程 .......................................................................144 1.Linux 内核模块..............................................................................144 2.字符设备驱动程序 ...........................................................................146 3.设备驱动中的并发控制 .......................................................................151 4.设备的阻塞与非阻塞操作 .....................................................................157

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值