回答編集履歴
2
追記
answer
CHANGED
@@ -14,4 +14,27 @@
|
|
14
14
|
|
15
15
|
ということは、`int** items //output `はitems_pointerと同じ型ですね。
|
16
16
|
つまり、function_name()関数内で`*items`としてアクセスすることで、呼び出し側の`items`と同じものをアクセスできるのです。
|
17
|
-
ならば、function_name()関数内で`*items=xxx;`とすれば、呼び出し側の`items`へxxxを返却できるということになるのです
|
17
|
+
ならば、function_name()関数内で`*items=xxx;`とすれば、呼び出し側の`items`へxxxを返却できるということになるのです
|
18
|
+
|
19
|
+
---
|
20
|
+
【追記】
|
21
|
+
> また先輩いわく、char *, int * は1次元配列、char int は、2次元配列と捕らえることが可能といっていましたが、本当ですか。
|
22
|
+
|
23
|
+
ああっ、これは下記の間違いなのですね。
|
24
|
+
|
25
|
+
> また先輩いわく、`char *`, `int *` は1次元配列、`char **` `int **` は、2次元配列と捕らえることが可能といっていましたが、本当ですか。
|
26
|
+
|
27
|
+
その意味であれば可能です。なかなかややこしいです。
|
28
|
+
`int*`をint型配列へのポインタと捉え、`int**`を`int*`型配列へのポインタと捉えるわけです。
|
29
|
+
まとめると、`int**`型を「「int型の配列へのポインタ」型の配列」へのポインタと捉えることが可能です。
|
30
|
+
そして、配列の配列は2次元配列ですから、`int**`は2次元配列へのポインタとして使うこととができます。
|
31
|
+
|
32
|
+
冒頭で説明したように、`int*`型は`int`型へのポインタでもあり、`int`型配列へのポインタでもありますから、`int**`型は`int*`型へのポインタでもあり、`int*`型配列へのポインタでもあります。
|
33
|
+
|
34
|
+
組み合わせると、下記4つの使い方が可能です。
|
35
|
+
①`int`型へのポインタ × `int*`型へのポインタ →int型へのポインタのポインタ
|
36
|
+
②`int`型の配列へのポインタ × `int*`型へのポインタ →1次元配列へのポインタのポインタ
|
37
|
+
③`int`型へのポインタ × `int*`型の配列へのポインタ
|
38
|
+
④`int`型の配列へのポインタ × `int*`型の配列へのポインタ→[2次元ジャグ配列](http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/algorithm/data_struct/002.html#jagged_arrays)へのポインタ
|
39
|
+
|
40
|
+
前回の質問では、②の形式で使われていました。
|
1
typo
answer
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
|
5
5
|
単純に誤りです。
|
6
6
|
|
7
|
-
さて、`int* items = 0`と定義すると、int型へのポインタitemsが定義されます。これはint型の配列へのポインタとしても使われます。(int型へのポインタ、int型配列へのポインタのどちらにも使え
|
7
|
+
さて、`int* items = 0`と定義すると、int型へのポインタitemsが定義されます。これはint型の配列へのポインタとしても使われます。(int型へのポインタ、int型配列へのポインタのどちらにも使え混乱しやすいので要注意です。)
|
8
8
|
|
9
9
|
次に、「`int型へのポインタitems`へのポインタ」を考えて下さい。仮に、items_pointerとします。
|
10
10
|
*items_pointerはitemsそのものになりますね。
|
11
11
|
|
12
12
|
ではitems_pointerの型はどうなるでしょう?
|
13
|
-
int型へのポインタはint*です。同様にint*型へのポインタはint**型ですので、items_pointerの方はint**です。
|
13
|
+
`int`型へのポインタはint*です。同様に`int*`型へのポインタは`int**`型ですので、items_pointerの方はint`**`です。
|
14
14
|
|
15
15
|
ということは、`int** items //output `はitems_pointerと同じ型ですね。
|
16
16
|
つまり、function_name()関数内で`*items`としてアクセスすることで、呼び出し側の`items`と同じものをアクセスできるのです。
|