2017-09-18 15 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でそれを行うためのきれいな方法はありません、それは "値渡し"が意味するところは、あなたがそれに影響を与えることができないということです。後でコンパイラから生成されたマシンコードにパッチを当てて実行することもできますが、これは一般的な解決策ではなく、単なるコンパイルによるものです。 (コンパイル時に最適化されたコンパイラの大半は、第2の '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

単純な回答:できません。 目的を達成するには、ポインタを渡す必要があります。

関連する問題