2

我无法通过参考以我期望的方式获得简单的通行证。拳头,当我编译时,我收到以下警告:

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;
}

这里出了什么问题?

4

1 回答 1

9

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

*(j++)  // invalid read BTW

当你想要

(*j)++

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

于 2013-05-16T22:38:17.500 回答