2013-05-16 54 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具有參照沒有概念通行證;一切都是按價值傳遞的。你正在通過價值傳遞地址。間接!=通過引用傳遞。