もう少しきちんと理解しておきたいのでご質問します。
int x[5];
int* p1 = x;
int(*p2)[5] = &x;
で
1,sizeof(x)
2,sizeof(&x);
3,sizeof(*x);
4,sizeof(p1);
5,sizeof(*p1);
6,sizeof(p2);
7,sizeof(*p2);
の値がどうなるか考えたいと思います。処理系がVisualC++6.0なのでintはサイズ4です。
1,ポインタが5個の配列の型はint *[5]で4x5=20
2,前質問でもありましたが、int(*)[5]で5個の配列へのポインタでサイズは4です。
3,型はint (**)[5]であくまでポインタなのでサイズは4?
4,型はint (**)[5]なので3と同じく4?
5,型はint (***)[5]で4?
6,型は・・??でサイズは??
7,型は・・??でサイズは??
1と2は合ってるとは思うのですが3,4,5は確信があやふやなのでご指摘いただければと思います。
6,7は型もサイズもわかりません。教えて下さい。
ポインタのサイズ2
Re:ポインタのサイズ2
VC++6とのことなので,通常のポインタはすべて4バイトですね。
sizeof(int) == sizeof(int *)なので4とあるとどちらかわかりにくくなってしまいます。
このため,intをすべてcharに置き換えて書いてみます。
> 1,sizeof(x)
x : char [5] // array[5] of char
よって,
sizeof(x) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5
> 2,sizeof(&x);
x : char [5]
&x : char (*)[5} // pointer to array[5] of char
よって,
sizeof(&x) = sizeof(char (*)[5]) = 4
> 3,sizeof(*x);
x : char [5] // 配列型の一次式は特定の演算子以外に対して先頭要素へのポインタに変換 : char *
*x : char // char
よって
sizeof(*x) = sizeof(char) = 1
> 4,sizeof(p1);
p1 : char * // pointer to char
よって
sizeof(p1) = sizeof(char *) = 4
> 5,sizeof(*p1);
p1 : char *
*p1 : char
よって
sizeof(*p1) = sizeof(char) = 1
> 6,sizeof(p2);
p2: char (*)[5]
よって
sizeof(p2) = sizeof(char (*)[5]) = 4
> 7,sizeof(*p2);
p2: char (*)[5]
*p2 : char [5]
よって
sizeof(*p2) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5
sizeof(int) == sizeof(int *)なので4とあるとどちらかわかりにくくなってしまいます。
このため,intをすべてcharに置き換えて書いてみます。
> 1,sizeof(x)
x : char [5] // array[5] of char
よって,
sizeof(x) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5
> 2,sizeof(&x);
x : char [5]
&x : char (*)[5} // pointer to array[5] of char
よって,
sizeof(&x) = sizeof(char (*)[5]) = 4
> 3,sizeof(*x);
x : char [5] // 配列型の一次式は特定の演算子以外に対して先頭要素へのポインタに変換 : char *
*x : char // char
よって
sizeof(*x) = sizeof(char) = 1
> 4,sizeof(p1);
p1 : char * // pointer to char
よって
sizeof(p1) = sizeof(char *) = 4
> 5,sizeof(*p1);
p1 : char *
*p1 : char
よって
sizeof(*p1) = sizeof(char) = 1
> 6,sizeof(p2);
p2: char (*)[5]
よって
sizeof(p2) = sizeof(char (*)[5]) = 4
> 7,sizeof(*p2);
p2: char (*)[5]
*p2 : char [5]
よって
sizeof(*p2) = sizeof(char [5]) = sizeof(char) * 5 = 1 * 5 = 5