c 中运算符的地址和左值
Address of operator and L-values in c
如果我运行下面的代码:
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我收到错误:
lvalue required as left operand of assignment
我理解这意味着当使用 addressof 运算符时,生成的指针不是有效的左值,如 c 文档中所反映的那样。
我的问题只是:为什么?
我无法更改指向变量 x 的指针值的原因是什么?是为了防止程序员犯错,还是根本就没有意义(如果是这种情况,请解释原因。)
这一行:
&x = y;
听起来你想说 "I want x
to be stored in the address y
"。
- 当你声明一个变量(
x
)时,它的地址(你所说的"pointer value")是一个常量值。这不是 "lvalue"。 ("l" for "left",赋值操作的左边部分,所以可以赋值。)
- 此外,您并不打算自己决定系统在内存中设置数据的位置。
- 此外,您甚至不确定 "y" 地址是否是允许您的进程写入的分配位置。
这里有三个不让你这样做的理由。 :)
此处 &
运算符为您提供了变量 x
的地址,您正试图将某些内容分配给该地址,但这是不可能的,这没有意义。
如果要更改存储在x
中的值,只需分配给它:
x = 5;
如果你有一个指针 (int*
) y
并且你想将它的值赋给 x
,使用 *
运算符得到 value y 指向(存储在该地址中)并将其分配给 x
:
x = *y;
如果要将指针y
赋值给x
,这是不可能的。为此使用另一个指针。
int *y1 = y;
在你的代码中
&x = y
此行显示错误,因为 &x 是一个常量指针,因此在初始化后无法更改
如果我运行下面的代码:
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我收到错误:
lvalue required as left operand of assignment
我理解这意味着当使用 addressof 运算符时,生成的指针不是有效的左值,如 c 文档中所反映的那样。
我的问题只是:为什么?
我无法更改指向变量 x 的指针值的原因是什么?是为了防止程序员犯错,还是根本就没有意义(如果是这种情况,请解释原因。)
这一行:
&x = y;
听起来你想说 "I want x
to be stored in the address y
"。
- 当你声明一个变量(
x
)时,它的地址(你所说的"pointer value")是一个常量值。这不是 "lvalue"。 ("l" for "left",赋值操作的左边部分,所以可以赋值。) - 此外,您并不打算自己决定系统在内存中设置数据的位置。
- 此外,您甚至不确定 "y" 地址是否是允许您的进程写入的分配位置。
这里有三个不让你这样做的理由。 :)
此处 &
运算符为您提供了变量 x
的地址,您正试图将某些内容分配给该地址,但这是不可能的,这没有意义。
如果要更改存储在x
中的值,只需分配给它:
x = 5;
如果你有一个指针 (int*
) y
并且你想将它的值赋给 x
,使用 *
运算符得到 value y 指向(存储在该地址中)并将其分配给 x
:
x = *y;
如果要将指针y
赋值给x
,这是不可能的。为此使用另一个指针。
int *y1 = y;
在你的代码中
&x = y
此行显示错误,因为 &x 是一个常量指针,因此在初始化后无法更改