回答編集履歴

3

修正

2023/05/30 00:25

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -20,9 +20,9 @@
20
20
  > 「`p[N]=*(p+N)`であり`p[N]=*(p+N)=* (N+p)=N[p]`となり実質的に同じアドレス値になる」
21
21
 
22
22
  しかしこの説明だと簡潔にすぎるので補足を行いますと、
23
- まず前提として
23
+
24
- * 変数`p`はポインタ型または配列型で、`N`は整数型である必要があります。
24
+ * この説明において変数`p`はポインタ型または配列型で、`N`は整数型である必要があります。
25
- * 添字演算子`[]`は演算対象となるもの(オペランド)を2つ取り、「ポインタ型または配列型」整数型である必要があります。
25
+ * 添字演算子`[]`は演算対象となるもの(オペランド)を2つ取り、1つは「ポインタ型または配列型」、もう1つは整数型である必要があります。
26
26
  * 添字演算子`[]`は `p[N] = *(p+N)`となるように *定義されています。*
27
27
  * 加算演算子`+`は左右オペランドを交換しても同じ結果になります。すなわち、`a+b = b+a`です。
28
28
 

2

追記

2023/05/30 00:24

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -19,7 +19,17 @@
19
19
  説明のとおりです。
20
20
  > 「`p[N]=*(p+N)`であり`p[N]=*(p+N)=* (N+p)=N[p]`となり実質的に同じアドレス値になる」
21
21
 
22
+ しかしこの説明だと簡潔にすぎるので補足を行いますと、
23
+ まず前提として
24
+ * 変数`p`はポインタ型または配列型で、`N`は整数型である必要があります。
25
+ * 添字演算子`[]`は演算対象となるもの(オペランド)を2つ取り、「ポインタ型または配列型」と整数型である必要があります。
22
- この`p[N]=*(p+N)`の部分がんでそなるのかわからなという場合は、
26
+ * 添字演算子`[]`は `p[N] = *(p+N)`るよに *定義されてます。*
23
- 説明が省略されているわけではなく、
24
- 「そもそも`[]`がそういう動作をするように定義されている」という話です。
27
+ * 加算演算子`+`は左右オペランド交換しても同じ結果になりま。すなわち、`a+b = b+a`です。
25
28
 
29
+ 以上を踏まえると
30
+ * `p[N] = *(p+N)`である
31
+ * `N[p] = *(N+p)`である
32
+ * `p+N = N+p`である
33
+ * したがって`p[N] = N[p]`である
34
+
35
+ ということになります

1

修正

2023/05/30 00:01

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -17,7 +17,7 @@
17
17
  > なぜp[N]=N[p]となるのか
18
18
 
19
19
  説明のとおりです。
20
- > 「p[N]=*(p+N)でありp[N]=*(p+N)=* (N+p)=N[p]となり実質的に同じアドレス値になる」
20
+ > 「`p[N]=*(p+N)`であり`p[N]=*(p+N)=* (N+p)=N[p]`となり実質的に同じアドレス値になる」
21
21
 
22
22
  この`p[N]=*(p+N)`の部分がなんでそうなるのかわからないという場合は、
23
23
  説明が省略されているわけではなく、