14

给定一个用户定义的类型A和一个指针,和有A* a什么区别?*aa[0]

(虽然*(a+0)/被定义为等价的,但/a[0]的情况并非如此,在某些情况下,细微的差异可能会导致编译错误。)*aa[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 回答