“*a”和“a[0]”有什么区别

What is the difference between `*a` and `a[0]`?

本文关键字:区别 什么      更新时间:2023-10-16

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