2013-05-16 86 views
2

我无法通过引用简单传递按我期望的方式工作。拳头了,当我编译,我得到以下警告:在C中通过引用无法正常工作

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

这是怎么回事错在这里?

+0

@EdS。严格地说,虽然C没有引用传递,但将一个指针传递给一个函数并改变它所引用的值实际上是一样的。看到[这个答案](http://stackoverflow.com/questions/2229498/passing-by-reference-in-c/2229510#2229510)以及。 – Kninnug

+0

@Kninnug:不,它不是。您正在添加一个间接级别,但您总是*通过价值传递您的参数。 –

回答

9

运算符优先级。递增运算结合更加紧密比引用操作,让你的代码在语义上等同于:

*(j++) // invalid read BTW 

当你想

(*j)++ 

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