2017-09-18 52 views
-1

如何在C中的函數中修改通過值而不是通過引用傳遞的變量?如何在C中的函數中修改通過值而不是通過引用傳遞的變量?

void fun_a(int a, int b) { 
    .... 
} 

int main() { 
    int x = 5, y = 6; 
    printf("%d, %d", x, y); // 5, 6 

    fun_a(x, y);    // pass by value 

    printf("%d, %d", x, y); // 1, 2 

    return 0; 
} 

如何使用fun_a更改變量?

有沒有辦法做到這一點?雖然我知道它可以通過輕鬆傳遞引用來更改變量。

+5

你不能,你只能得到一個副本,它不會傳播回來。 – Jester

+2

有沒有乾淨的方法來做到這一點在常規C,這就是「按價值傳遞」的意思,你不能影響它。你可能需要修改編譯器生成的機器代碼才能完成它,但這不是通用的解決方案,只是每次編譯。 (因爲大多數具有優化的編譯器會將第二個'printf'編譯爲'puts(「5,6」);'以節省運行時資源,因爲在編譯期間已知'x,y'的值,所以在如果您需要修補機器碼以包含不同的字符串以輸出「1,2」) – Ped7g

+0

您的問題就像詢問是否有任何方法用錯誤的方式書寫。 – fuz

回答

4

C不知道參考。改用指針。

void fun_a(int *a, int *b) { 
    *a = 10; 
    *b = 12; 
} 

int main() { 
    int x = 5, y = 6; 
    printf("%d, %d\n", x, y); // 5, 6 
    fun_a(&x, &y);    // pass pointer to variable 
    printf("%d, %d\n", x, y); // 10, 12 

    return 0; 
} 
2

簡單的回答:你不能。 要實現您的目標,您必須通過指針傳遞。

相關問題