想问一下这里为什么参数用的是结构体的地址而不是结构体本身

正在回答

登陆购买课程后可参与讨论,去登陆

2回答
因为C语言中不支持结构体传参,所以只能传递结构体指针;归根结底,C语言不支持一以下写法:
struct termios new_os = old_os;
所以函数原型被设计成了:
tcgetattr(int num, struct termios *attr)
  • 不明滚动物体 提问者 #1

    好的,谢谢

    2023-03-10 18:04:59
  • 山行老师,请问:tcgetattr(int num, struct termios *attr),结构体struct termios的哪个属性被传递进去了?

    2023-04-04 22:09:49
大白老师 2023-03-10 17:44:52

这个函数是linux系统自己定义的函数,函数的原型如下。

int tcgetattr(int fd, struct termios *termios_p);

功能:tcgetattr函数用于获取与终端相关的参数。

可以看出上面的第二个参数的要求是个指针。所以要求传递结构体的地址。

扩展:linux系统提供的函数,若是遇到结构体的话,参数大多都是传递地址。因为在32bit的系统中,地址占4byte。用指针接收,可以减少内存的占用。普通结构体变量占用的内存空间较大。


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师