【问题标题】:Pass by reference in C not working在 C 中通过引用传递不起作用
【发布时间】:2013-05-16 22:35:05
【问题描述】:

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

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

这里出了什么问题?

【问题讨论】:

  • @EdS。虽然严格来说,C 没有通过引用传递,但传递指向函数的指针和更改它引用的值实际上是一回事。参见this answer
  • @Kninnug:不,不是。您正在添加一个间接级别,但您总是按值传递参数。

标签: c operator-precedence


【解决方案1】:

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

*(j++)  // invalid read BTW

当你想要的时候

(*j)++

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 2012-03-09
    • 2017-01-24
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多