在 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 可以在代码中用作指针是否正确,毕竟它只是一个表达式,在内存中它看起来如何?也许我想多了,事情就像 & 返回一个指向其操作数的指针一样简单。 最后我的理解是否正确,它是一个指向指针的指针?

来自this Draft C11 Standard

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”. …