c - 为什么++ 运算符不在 = 运算符之前

标签 c pointers variable-assignment assignment-operator operator-precedence

为什么在这个例子中

*p++ = c;

*p 首先等于 c 然后 p 增加 1。我看了this运算符优先级表,它说“=”运算符在 15. 位置,++(后缀)在第一位。这对我来说没有意义。我试过这个的例子:

      char in_line[LINELNG];
      char *cp;
      int c;

      cp = &in_line[0];
      while((c = getc(stdin)) != EOF){
              if(cp == &in_line[LINELNG-1] || c == '\n'){
                      /*
                       * Insert end-of-line marker
                       */
                      *cp = 0;
                      if(strcmp(in_line, "stop") == 0 )
                              exit(EXIT_SUCCESS);
                      else
                              printf("line was %d characters long\n",
                                      (int)(cp-in_line));
                      cp = in_line;
              }
              else
                      *++cp = c;
      }

最佳答案

伪代码扩展:

*p++ = c;

相当于

*p = c;
p = p + 1;

同时

*++p = c;

相当于

p = p + 1;
*p = c;

++ 确实比 C 中的大多数其他运算符绑定(bind)得更紧密,但它的前/后修复位置决定了 p 中的值发生了什么,并且使用时。

关于c - 为什么++ 运算符不在 = 运算符之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533599/

相关文章:

pointers - 用func golang传递指针的值

c++ - 在分配期间调用不需要的对象的析构函数

c++ - 数组赋值不适用于指针语法

c - 如何在变量名中创建变量?

c - 如何允许非选项参数以任何顺序获取 getopt?

c - C中快捷键的解释

c - 绑定(bind)在我的 C 程序中不起作用

c++ - C++中的指针如何帮助节省内存?

c++ - 如何声明包含整数数组的对象

sql - 具有多个属性的 SELECT INTO