ポインタなど覚え書き

データ構造とかアルゴリズムの本のサンプルコードがC++で書かれていることが多いのでC++読めるようになりたい。 いきなりC++でもいいけど、下準備としてドットインストールのC入門をざっとやってみた。

  • if文の書き方とかセミコロンとかJavaScriptiに似てるな

  • 文字列は文字charの配列。(終端の要素が"\0")

  • ある変数(x)は特定のメモリ領域(#XXXX)に対応しており、あるメモリ領域には特定の値(value_of_x)が入っている。

    • たとえばnというint型変数(∈変数)は#0001というメモリ領域に対応しており、#0001というメモリ領域には"10"というint型の値が入っている。
  • ポインタもなんのことはない、変数の一種。

    • たとえばpというポインタ(∈変数)は#0005というメモリ領域に対応しており、#0005というメモリ領域には"#1000"というアドレスが入っている。
  • &変数名で、その変数が対応するメモリ領域のアドレスを返す。

    • たとえば&nは"#0001"を返し、&pは"#0005"を返す。
  • *ポインタ名で、そのポインタが指し示すアドレスに格納された値を返す。

    • #1000というメモリ領域に20という値が入っていた場合、*pは#1000に格納された"20"という値を返す。
    • #1000というメモリ領域に#0001という値が入っていた場合、
      • *pは#1000に格納された"#0001"という値を返す。
      • **pとするとさらに辿って、#0001に格納された"10"という値を返す。
  • ポインタの宣言

    • *pがint型を返すようなポインタpを宣言するには、int* porint *pと記述する(どちらも意味は同じ)。
    • 宣言に用いる「*」と、アドレスを辿って中身を返す「*」は別モノなので注意する。
    • *pがアドレスを返すような「ポインタのポインタ」を宣言する場合には、辿る回数だけ*を重ねて、int** porint **pと記述する。
  • ポインタpの中身をprintfするには、printf("%p", p)