C语言中点操作符(.)和箭头操作符(->)的不同之处

自己写一个简单的uname, 要用到utsname结构体, 编译报错如下:

.. code:: c

uname.c: In function ‘main’:
uname.c:8:42: error: invalid type argument of ‘->’ (have ‘struct utsname’)
   printf("%s - %s - %s - %s - %s\n", name->sysname, name->nodename,\
                                          ^

查实一下, 是因为用错了操作符:

  • -> 的左侧必须是指针.
  • . 的左侧必须是结构体实体.

程序如下:

.. code:: c

$ cat -n uname.c
1  #include <sys/utsname.h>
2  #include <stdio.h>
3
4  int main(void)
5  {
6    struct utsname name;
7    printf("%d\n", uname(&name));
8    printf("%s - %s - %s - %s - %s\n", name.sysname, name.nodename,\
9        name.release, name.version, name.machine);
10    return 0;
11  }

2014-09-21: ~~~~~~~~~~~

(摘自《征服c指针》-前桥和弥):

| p->hoge; | 是 | (*p).hoge; | 的语法糖.


更多文章
  • Golang CAS 操作是怎么实现的
  • PostgreSQL 当MQ来使用
  • Clash 结合 工作VPN 的网络设计
  • 使用 PostgreSQL 搭建 JuiceFS
  • PostgreSQL 配置优化和日志分析
  • 有GitHub Copilot?那就可以搭建你的ChatGPT4服务
  • 窗口函数的使用(以PG为例)
  • 读《为什么学生不喜欢上学》
  • OpenAI Prompt Engineering 摘录和总结
  • 读《打造真正的新产品》
  • 2023年终总结
  • VueJS 总结
  • Linux 自动挂载 alist 提供的webdav
  • FreeBSD 使用 vm-bhyve 安装Debian虚拟机
  • FreeBSD 和 Linux 网卡聚合实现提速