k-tokitoh

ポインタなど覚え書き

2019-04-28

データ構造とか 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)