質問するログイン新規登録

回答編集履歴

1

追記

2021/02/15 05:09

投稿

fana
fana

スコア12386

answer CHANGED
@@ -43,4 +43,41 @@
43
43
  ```
44
44
 
45
45
  **結論:難読コードを目指すとかいう話でないならば,素直に書けばどうか.**
46
- 自分自身で把握し難くなるような文法を持ち出しても無意味な苦労が増えるばかりであろう.
46
+ 自分自身で把握し難くなるような文法を持ち出しても無意味な苦労が増えるばかりであろう.
47
+
48
+ ---
49
+
50
+ [追記]
51
+ 以下の2パターンが混じって混乱しているようにも見える.
52
+
53
+ (1)ポインタ`p`が,常に「いじくるべき要素のアドレス」を指すように `p`を更新しながら配列要素をいじくる
54
+ ```C++
55
+ //配列の先頭要素のアドレスを指すポインタpがあって…
56
+ char *p = &(str[0]); //単に p = str; でも同じ
57
+
58
+ //先頭要素の値を100に変更
59
+ *p = 100;
60
+
61
+ //2番目の要素の値を200に変更する
62
+ ++p; //pのアドレスを「2番目の要素のアドレス」に更新して…
63
+ *p = 200; //2番目の要素の値を変更
64
+
65
+ //3番目の要素の値を300に変更する
66
+ ++p; //pのアドレスを「3番目の要素のアドレス」に更新して…
67
+ *p = 300; //3番目の要素の値を変更
68
+ ```
69
+
70
+ (2)ポインタ`p`は「配列の先頭要素のアドレス」を指すもので,いじくる要素のアドレスを「pの値からのアドレスオフセット」で示す
71
+ ```C++
72
+ //配列の先頭要素のアドレスを指すポインタpがあって…
73
+ char *p = &(str[0]); //単に p = str; でも同じ
74
+
75
+ //先頭要素の値を100に変更
76
+ *p = 100;
77
+
78
+ //2番目の要素の値を200に変更する
79
+ *(p + 1) = 200; //2番目の要素の値を変更
80
+
81
+ //3番目の要素の値を300に変更する
82
+ *(p + 2) = 300; //3番目の要素の値を変更
83
+ ```