プログラミングに挑戦!

swift・C言語について

ポインタの間接参照

ポインタの間接参照を使った演算

ポインタの間接参照



5行目... int型の変数 num を宣言している。初期値は10である。

6行目...ポインタ変数pを宣言している。変数numのアドレスを初期値としている。

 

8行目... printf 関数。("%d\n",  *p); で *p は6行目で示したように num を指しているので、10が出力される。

 

10行目... *p = *p +1; ここで *p に *p + 1を代入しているので8行目で示した値の10に1を加算した11となる。

13行目... printf 関数。("%d\n", *p); で10行目の演算結果を出力している。値は11となっている。これは num も同じである。

 

14行目... (*p)++; 10行目と同じ演算。書き方の違い。*p に1を加算している。結果は12になる。 num も同じ値。

15行目... printf 関数。("%d\n", *p); で14行目の演算結果を出力している。値は12。

16行目... printf 関数。("%d\n", num); numの出力。*p と同一になっていることの確認。

結果は12となり*p とnum が一致している。 

 

 *(アスタリスク) の三つの意味

  1. 乗算...掛け算を表す
  2. ポインタ宣言子...ポインタであることを表している
  3. 間接参照演算子... *p の指し示す先を表す

2.と3.の使い分けがややこしく感じる。

 

アスタリスクの使い分け

5行目... int 型の変数 b を宣言している

6行目...ポインタ変数 a を宣言し b のアドレスを渡している。

ポインタ宣言子 

8行目... *a に8を代入している。

間接参照演算子

ポインタ宣言子はポインタであることの宣言

間接参照演算子は *a (つまりb)を指し示している

 

ポインタ宣言子と間接参照演算子の区別が曖昧だったので、理解が遅れた。今でも何だか自信が無いのだが...

しばらくは、ポインタの学習になるのかと思う。