回答編集履歴

1

追記

2021/02/15 05:09

投稿

fana
fana

スコア11985

test CHANGED
@@ -89,3 +89,77 @@
89
89
  **結論:難読コードを目指すとかいう話でないならば,素直に書けばどうか.**
90
90
 
91
91
  自分自身で把握し難くなるような文法を持ち出しても無意味な苦労が増えるばかりであろう.
92
+
93
+
94
+
95
+ ---
96
+
97
+
98
+
99
+ [追記]
100
+
101
+ 以下の2パターンが混じって混乱しているようにも見える.
102
+
103
+
104
+
105
+ (1)ポインタ`p`が,常に「いじくるべき要素のアドレス」を指すように `p`を更新しながら配列要素をいじくる
106
+
107
+ ```C++
108
+
109
+ //配列の先頭要素のアドレスを指すポインタpがあって…
110
+
111
+ char *p = &(str[0]); //単に p = str; でも同じ
112
+
113
+
114
+
115
+ //先頭要素の値を100に変更
116
+
117
+ *p = 100;
118
+
119
+
120
+
121
+ //2番目の要素の値を200に変更する
122
+
123
+ ++p; //pのアドレスを「2番目の要素のアドレス」に更新して…
124
+
125
+ *p = 200; //2番目の要素の値を変更
126
+
127
+
128
+
129
+ //3番目の要素の値を300に変更する
130
+
131
+ ++p; //pのアドレスを「3番目の要素のアドレス」に更新して…
132
+
133
+ *p = 300; //3番目の要素の値を変更
134
+
135
+ ```
136
+
137
+
138
+
139
+ (2)ポインタ`p`は「配列の先頭要素のアドレス」を指すもので,いじくる要素のアドレスを「pの値からのアドレスオフセット」で示す
140
+
141
+ ```C++
142
+
143
+ //配列の先頭要素のアドレスを指すポインタpがあって…
144
+
145
+ char *p = &(str[0]); //単に p = str; でも同じ
146
+
147
+
148
+
149
+ //先頭要素の値を100に変更
150
+
151
+ *p = 100;
152
+
153
+
154
+
155
+ //2番目の要素の値を200に変更する
156
+
157
+ *(p + 1) = 200; //2番目の要素の値を変更
158
+
159
+
160
+
161
+ //3番目の要素の値を300に変更する
162
+
163
+ *(p + 2) = 300; //3番目の要素の値を変更
164
+
165
+ ```