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; | 的语法糖.


更多文章
  • Python Requests 简明教程
  • 密码技术简明教程(三):证书和TLS
  • 密码技术简明教程(二):散列、消息认证码和数字签名
  • SEO学习笔记
  • 密码技术简明教程(一):对称加密和非对称加密
  • Kubernetes 笔记
  • go mod 和 logrus 路径大小写的问题
  • Flask自动加载Blueprint
  • 在KVM里安装Minikube
  • 搞定面试中的系统设计题
  • Crontab + Sendmail实现定时任务并且通知
  • Nginx设置Referer来防止盗图
  • Graphviz dot简明教程
  • jQuery简明教程
  • Python RQ(Redis Queue)添加gevent支持