14

ユーザー定義型Aとポインターが与えられた場合、とA* aの違いは何ですか?*aa[0]

*(a+0)/a[0]は同等であると定義されていますが、 *a/の場合は同じではありませんa[0]。微妙な違いにより、特定の状況でコンパイルエラーが発生する可能性があります。)

4

1 に答える 1

36

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)が、ポインタ演算ではサイズを知る必要があるため、不完全な型(ゼロでもない)のオブジェクトへのポインタに何かを追加することはできません。

于 2013-01-23T19:32:32.317 に答える