ポインタとポインタの参照、ポインタのポインタ

1876 ワード

ポインタとポインタの参照、ポインタのポインタ
本文はC/C++の中のいくつかの概念を簡単に分析する.
ししん
CとC++の両方にポインタの概念が存在する.
  • ポインタの本質:変数です.
  • ポインタのタイプ:ポインタのタイプ(ポインタのタイプに関連).
  • ポインタの内容:アドレス.

  • 次のようになります.
    int a = 1;
    int *pa = &a;

    簡単に言えば、ポインタも変数であり、上記のpaはポインタ変数であり、この変数に格納されている内容は変数aのアドレスであり、paの値が出力されると大体このようになる:0 xbff 405 f 8.C言語では、関数パラメータを変更するには、ポインタを入力する必要があります.次のようになります.
    void change(int a)
    {    a ++; }
    void real_change(int *a)
    {    (*a) ++;}
    int a = 1;
    int *ptr = &a;
    change(a);
    real_change(ptr);

    C言語を学んだことがある人はすべて知っていて、上のchange関数を呼び出すのは本当に変数aの値を変えることができなくて、必ず下のreal_を呼び出さなければなりませんchange関数を変更することができます.また,このポインタ変数も通常の変数のように,アドレスオペレータ&を用いて得ることができる記憶アドレスがある.
    参照
    引用はC++の概念で、簡単に言えば、引用は変数の別名です.引用によってC言語におけるポインタの効果が得られるが,煩雑なポインタ操作は必要ない.
    void change(int &a)
    {    a ++; }
    int a = 1;
    change(a);

    これにより、変数aの値を変更することができる.
    針の針
    ポインタのポインタはよく理解されていますが、実際にはポインタ変数を普通の変数として見ているので、ポインタのポインタが保存されているのはポインタ変数のアドレスです.
    int a = 1;
    int *ptr = &a;
    int **ptr_ptr = &ptr;

    では、針の針は何の役に立つのでしょうか.ポインタをパラメータとして関数に渡す目的は,ポインタが指す変数の値を関数で変更することであるため,ポインタのポインタを用いてポインタが指すポインタの値を変更することができる.拗ねて、上のコードで例を挙げます:ptr_ptrはポインタptrを指すポインタであるためptr_ptrは、ポインタptrの値を変更することができ、すなわち、ポインタ変数ptrが保持する値を変更することができ、すなわち、ポインタptrの指向を変更することができる.例:
    void change_ptr(int *p)
    {
        p = NULL;
    }
    void real_change_ptr(int **P)
    {
        (*p) = NULL;
    }

    change_でptrはpの指向を変えたいのですが、上の分析では実現できないことがわかり、real_を通過しなければなりません.change_ptrのような呼び出し形式で実現される.
    ポインタの参照
    前述したように,C++では参照を用いることで煩雑なポインタ操作を避けることができ,ポインタのポインタをポインタの参照に変更することはC++の習慣に合致する.
    void change_ptr(int *p)
    {
        p = NULL;
    }
    void real_change_ptr(int *&P)
    {
        p = NULL;
    }

    上の基礎があって、私たちは上のchangeを知っています.ptrはpの指向を変えることはできません(これは私が犯した間違いです)、次のreal_を使用しなければなりません.chang_ptrのような呼び出し形式.