こんにちは。
また先輩いわく、char *, int * は1次元配列、char int は、2次元配列と捕らえることが可能といっていましたが、本当ですか。
単純に誤りです。
さて、int* items = 0と定義すると、int型へのポインタitemsが定義されます。これはint型の配列へのポインタとしても使われます。(int型へのポインタ、int型配列へのポインタのどちらにも使え混乱しやすいので要注意です。)
次に、「int型へのポインタitemsへのポインタ」を考えて下さい。仮に、items_pointerとします。
*items_pointerはitemsそのものになりますね。
ではitems_pointerの型はどうなるでしょう?
int型へのポインタはint*です。同様にint*型へのポインタはint**型ですので、items_pointerの方はint**です。
ということは、int** items //output はitems_pointerと同じ型ですね。
つまり、function_name()関数内で*itemsとしてアクセスすることで、呼び出し側のitemsと同じものをアクセスできるのです。
ならば、function_name()関数内で*items=xxx;とすれば、呼び出し側のitemsへxxxを返却できるということになるのです
【追記】
また先輩いわく、char *, int * は1次元配列、char int は、2次元配列と捕らえることが可能といっていましたが、本当ですか。
ああっ、これは下記の間違いなのですね。
また先輩いわく、char *, int * は1次元配列、char ** int ** は、2次元配列と捕らえることが可能といっていましたが、本当ですか。
その意味であれば可能です。なかなかややこしいです。
int*をint型配列へのポインタと捉え、int**をint*型配列へのポインタと捉えるわけです。
まとめると、int**型を「「int型の配列へのポインタ」型の配列」へのポインタと捉えることが可能です。
そして、配列の配列は2次元配列ですから、int**は2次元配列へのポインタとして使うこととができます。
冒頭で説明したように、int*型はint型へのポインタでもあり、int型配列へのポインタでもありますから、int**型はint*型へのポインタでもあり、int*型配列へのポインタでもあります。
組み合わせると、下記4つの使い方が可能です。
①int型へのポインタ × int*型へのポインタ →int型へのポインタのポインタ
②int型の配列へのポインタ × int*型へのポインタ →1次元配列へのポインタのポインタ
③int型へのポインタ × int*型の配列へのポインタ
④int型の配列へのポインタ × int*型の配列へのポインタ→2次元ジャグ配列へのポインタ
前回の質問では、②の形式で使われていました。