【解決方法】引数をポインタとして渡した後、p がそのアドレスを変更しないのはなぜですか?


私はcが初めてです。 i の値を変更する必要があると考えていますが、実際には変更されていません。

f関数では:

C
void f(int *p, int a) {
    p = &a;
}

主な機能:

C
int main() {
    int i = 10, j = 20;
    change(&i, j);
    printf("%d", i);
    return 0;
}

ポインタ変数を引数として渡した後でも、i の値が 10 のままなのはなぜですか。 値渡しとして動作するのはなぜですか。

私が試したこと:

頭から離れて助けてください。 理解に苦しみます。

解決策 1

シンプル:あなたは電話しない f そのコードではまったく。
という関数を呼び出します change – しかし、そのためのソース コードがないため、コードがコンパイルされない可能性が非常に高いです。 コンパイルされない場合、EXE ファイルは生成されないため、実行する EXE にはソース コードへの最新の変更が反映されません。

したとしても、あなたは何を変えません p ポイント: ローカル パラメータ変数に新しい値を設定します。 p これは、C ではすべてのパラメーターが値で渡されるため、「外の世界」には反映されません。実際の変数ではなく、渡された値のコピーが作成されます。

これを試して:

C
#include <stdio.h>
void f(int *p, int a) {
    *p = a;
}

int main() {
    int i = 10, j = 20;
    f(&i, j);
    printf("%d", i);
    return 0;
}

次に、次のアドレスを渡します i 関数に追加し、それが指す変数の値を変更すると、出力される結果が変わります。

コメント

タイトルとURLをコピーしました