ユーザー定義型A
とポインターが与えられた場合、とA* a
の違いは何ですか?*a
a[0]
(*(a+0)
/a[0]
は同等であると定義されていますが、 *a
/の場合は同じではありませんa[0]
。微妙な違いにより、特定の状況でコンパイルエラーが発生する可能性があります。)
ユーザー定義型A
とポインターが与えられた場合、とA* a
の違いは何ですか?*a
a[0]
(*(a+0)
/a[0]
は同等であると定義されていますが、 *a
/の場合は同じではありませんa[0]
。微妙な違いにより、特定の状況でコンパイルエラーが発生する可能性があります。)
A
が不完全なタイプの場合、この例で*a
は機能しますが、a[0]
機能しません。
struct A;
void foo(A& r)
{
}
void bar(A* a)
{
foo(*a);
foo(a[0]); // error: invalid use of incomplete type ‘struct A’
}
これa[0]
は、と同等であるためです*(a+0)
が、ポインタ演算ではサイズを知る必要があるため、不完全な型(ゼロでもない)のオブジェクトへのポインタに何かを追加することはできません。