【发布时间】:2017-02-02 06:21:31
【问题描述】:
以下摘录来自Harbinson, Steele C: A Reference Manual (5th Edition)。根据本书,p 的两个分配是等价的。
7.5.6 地址运算符
int a[10], *p;
p = a; p = *&a;
然而,根据 C 常见问题,Question 6.12 a 是指向 int 的类型指针,而 &a 是指向 int 数组的指针类型。
所以我们应该在第二个赋值 p = *&a 中遇到类型错误,因为我们试图将 int 的数组分配给一个指针。
为什么分配p = *&a 正确?
【问题讨论】:
-
我不明白混淆在哪里——如果
&a是指向int数组的指针,那么*&a是int的数组,它是指向int的类型指针,这是p的类型。 -
请不要在问题正文中添加发布链接。无论如何,任何好的答案都会引用/引用引用。
-
一元
*是一元&的逆,所以*&a == a,因此如果p = a是合法的(它是合法的),那么p = *&a也是合法的。 -
"
a是指向int的指针类型",没有a是一个数组,即int[10]类型。 -
@reproduktor:
*&a确实是int的数组,但是它的类型是int[10],而不是“指向int的指针”。稍后在此上下文中键入int[10]decays 到int *。
标签: c arrays pointers assignment-operator