在C中通过引用无效

时间:2013-05-16 22:35:05

标签: c operator-precedence

我无法通过引用获得简单的传递,以我期望的方式工作。拳头关闭,当我编译时,我得到以下警告:

warning: value computed is not used [-Wunused-value]

其次,我希望在节目结束时打印2,而不是1。

$ ./testAdd
1

以下是简单的代码:

#include <stdio.h>

void addone(int *j) {
  *j++;
}

int main(int argc, char *argv[])
{
  int i = 1;

  addone(&i);

  printf("%d\n", i);

  return 0;
}

这里出了什么问题?

1 个答案:

答案 0 :(得分:9)

运营商优先权。增量运算符比解引用运算符绑定得更紧密,因此您的代码在语义上等同于:

*(j++)  // invalid read BTW

何时需要

(*j)++

另请注意,C没有通过引用传递的概念;一切都是通过价值。您按值传递地址。间接!=通过引用传递。