2016-01-08 31 views
-4

被調用的函數是否可以從調用函數的作用域中更改變量的值?一個函數可以從調用函數的作用域中改變變量的值嗎?

+1

你是什麼意思?什麼變量?無意中或通過設計更改這些變量?變量作爲參數或其他變量傳遞?你能不能展示一些代碼,最好是一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve),它顯示你的意思?另請[請閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

+2

好吧,簡單的答案是「是的」。 –

+0

你所說的功能,實際上叫做「範圍」。你可以在這裏找到一個簡略的解釋:http://www.tutorialspoint.com/cprogramming/c_scope_rules.htm –

回答

1

C pointer

#include <stdio.h> 

    void funcA(int* a) 
    { 
     *a = 2; 
    } 

    void funcB(void) 
    { 
     int b = 1; 

     printf("-> %d\n", b); /* -> 1 */ 
     funcA(&b); 
     printf("-> %d\n", b); /* -> 2 */ 
    } 

    int main(void) 
    { 
     funcB(); 
     return 0; 
    } 
+0

傳遞'b'的*地址*作爲變量。你的'funcA()'不會改變它。 –

0

那麼這將取決於你如何調用該函數。如果您使用按值調用的方法,那麼它不能更改原始值,但如果您使用調用引用(指針)方法,則它可以更改提供的參數表示您想要更改的相同變量。

+3

Nit pick:僅限C * *按價值調用。通過引用調用必須使用指針*模擬*。 – Jens

+1

但即使這不會改變從調用者傳遞的實際**指針變量**的值。被調用的函數可以使用指針變量的值來改變其他的東西,但是它不能改變調用者變量的值。除非指針指向自己。 –

相關問題