C 的一元“&”是做什么的?为什么它不适用于常量?

What does C's unary '&' do? Why doesn't it work on constants?

我正在尝试创建一种新的编程语言,我正在尝试添加来自 C 的 &(指针)运算符。它到底有什么作用?也就是说,它如何'create'一个指针?为什么它不能创建一个指向常量1的指针?我当前的运算符实现如下,但它也适用于常量,所以我假设这不是 C 运算符的工作方式:

operator & (any one argument):
    temp = allocate (typeof argument)
    store argument in temp
    return temp

1: 示例程序:

int main(){
    int* x;
    x = &1;
}

gcc 输出:

ptr.c: In function ‘main’:
ptr.c:3:6: error: lvalue required as unary ‘&’ operand
  x = &1;

C 的一元 & 为您提供它所应用的对象的地址。

因此,例如,&x 给出了 x 的地址。

它不会创建新变量,将 x 复制到该变量中,然后 return 新变量的地址。 return是x的地址,简单明了。

What does C's unary '&' do? Why doesn't it work on constants?

因为语言不允许。

C 可以 允许 &1 和其他语言一样,例如新语言 .NoOneIsHere。只是 C 标准也没有看到这样做的好处。没有技术上的理由不这样做,只是没有理由这样做。

&通常作为引号类型,用来取一个值地址,b = &b,例如b等于b的地址。