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

回答編集履歴

2

追記

2016/04/06 06:17

投稿

Chironian
Chironian

スコア23274

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

2016/04/06 06:17

投稿

Chironian
Chironian

スコア23274

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`と同じものをアクセスできるのです。