こんにちは私はダブルポインタについて質問があります。たとえば、このコードでは次のようになります。
int a, b=2;
int *iPtr1, **iPtr2;
iPtr1 = &a;
iPtr2 = &iPtr1;
*iPtr1 = b+3;
*iPtr2 = iPtr1;
最後の行*iPtr2 = iPtr1;
でiPtr1
ダブルポインタを一度だけ逆参照するので、それ自体を指すように指示することは、iPtr1
?を使用するようなものです。
こんにちは私はダブルポインタについて質問があります。たとえば、このコードでは次のようになります。
int a, b=2;
int *iPtr1, **iPtr2;
iPtr1 = &a;
iPtr2 = &iPtr1;
*iPtr1 = b+3;
*iPtr2 = iPtr1;
最後の行*iPtr2 = iPtr1;
でiPtr1
ダブルポインタを一度だけ逆参照するので、それ自体を指すように指示することは、iPtr1
?を使用するようなものです。
指し示すものは*iPtr2
何でもiPtr1
指します。そしてそれをiPtr2
指すようiPtr1
に と同じiPtr1 = iPtr1
です。
で実行をトレースするgdb
と、最後の行*iPtr2=iPtr1
が何も変更されていないことがわかります。(それは一種のようなものですiPtr1=iPtr1
)
iPtr2 = &iPtr1;
では、 はiPtr2
すでに THE POINTER が存在するアドレスを指していますが、iPtr1
THE ADDRESS が指しているわけではありませんiPtr1
。
注:その時点でガベージ値(ローカルの非静的変数の場合)があり、それを逆参照することは未定義の動作iPtr2=&iPtr1
であるため、に置き換えることはできません。*iPtr2=iPtr1
iPtr2