给定一个用户定义的类型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)
,但是您不能向指向不完整类型(甚至不是零)对象的指针添加某些内容,因为指针算术需要知道大小。