在 C 中,表达式可以是指针吗?
In C can expressions be pointers?
struct node
{
int a;
};
int main()
{
struct node y = {24};
struct node *x = &y;
return 0;
}
我最近一直无法理解表达式 &x
是如何指向指针类型(struct **node)的指针,但在做了一些研究后我发现,因为指针只是 一个保存(或指向)内存地址的对象,那么表达式&x
在技术上是一个指针,因为它产生一个地址(与实际表达式&x
代码中可以使用的指针).
&x
在技术上是指向指针的指针类型,因为 &x
是指向 x
的地址的指针,x 的地址的产生给了我们另一个指针,也就是实际的指针指针 x,因此它是指向指针的指针。
我的问题是,在 C 中如何将表达式用作指针?我假设 &x
可以在代码中用作指针是否正确,毕竟它只是一个表达式,在内存中它看起来如何?也许我想多了,事情就像 &
返回一个指向其操作数的指针一样简单。 最后我的理解是否正确,它是一个指向指针的指针?
6.5.3.2 Address and indirection operators
…
Semantics
3 The unary &
operator yields the address of its operand. If the operand has type “type”, the result has type “pointer to type”. …
struct node
{
int a;
};
int main()
{
struct node y = {24};
struct node *x = &y;
return 0;
}
我最近一直无法理解表达式 &x
是如何指向指针类型(struct **node)的指针,但在做了一些研究后我发现,因为指针只是 一个保存(或指向)内存地址的对象,那么表达式&x
在技术上是一个指针,因为它产生一个地址(与实际表达式&x
代码中可以使用的指针).
&x
在技术上是指向指针的指针类型,因为 &x
是指向 x
的地址的指针,x 的地址的产生给了我们另一个指针,也就是实际的指针指针 x,因此它是指向指针的指针。
我的问题是,在 C 中如何将表达式用作指针?我假设 &x
可以在代码中用作指针是否正确,毕竟它只是一个表达式,在内存中它看起来如何?也许我想多了,事情就像 &
返回一个指向其操作数的指针一样简单。 最后我的理解是否正确,它是一个指向指针的指针?
6.5.3.2 Address and indirection operators
…
Semantics
3 The unary&
operator yields the address of its operand. If the operand has type “type”, the result has type “pointer to type”. …