1. ホーム
  2. c

[解決済み] ポインタとポインタの明確化

2022-05-14 18:23:23

質問

私はこの チュートリアル がどのように ポインタ はどのように機能するのでしょうか。

関連する一節を引用します。


    int i = 5, j = 6, k = 7;
    int *ip1 = &i, *ip2 = &j;

これで

    int **ipp = &ip1;

ippip1 を指し、その先は i . *ippip1 であり、かつ **ippi または5である。この状況を、おなじみの箱と矢印の記法を使って、次のように説明することができます。

もし私たちが

    *ipp = ip2;

で指されるポインタを変更しました。 ipp (つまり ip1 ) のコピーを含むように ip2 を含むように、それ( ip1 ) を指すようになりました。 j :

<イグ


質問です:なぜ2枚目の写真では ipp を指しているのでしょうか? ip1 を指しているが ip2 ?

どのように解決するのですか?

ポインティングのアナロジーのことは少し忘れてください。 ポインタが実際に含むものは、メモリ アドレスです。 その & は "address of" 演算子で、つまり、オブジェクトのメモリ上のアドレスを返します。 つまり、オブジェクトのメモリ上のアドレスを返します。 * 演算子はポインタが参照するオブジェクトを返します。つまり、あるアドレスを含むポインタが与えられると、そのメモリアドレスにあるオブジェクトを返します。 ですから *ipp = ip2 とするとき、あなたがやっていることは *ipp で保持されているアドレスのオブジェクトを取得することです。 ipp である ip1 に代入し、さらに ip1 に格納されている値を ip2 のアドレスである j .

単に

& --の住所です。

* --での値です。