c中运算符和L值的地址
如果我运行以下代码:c中运算符和L值的地址,c,pointers,memory-address,C,Pointers,Memory Address,如果我运行以下代码: int main(){ int x = 0; int* y = &x; &x = y; } 我得到一个错误: 赋值的左操作数需要左值 我理解这意味着当使用addressof运算符时,生成的指针不是有效的左值,正如c文档中所反映的那样 我的问题是:为什么 我无法更改指向变量x的指针的值的原因是什么?这是为了防止程序员犯错误,还是根本没有意义(在这种情况下,请解释原因)。在这一行: &x = y; 听起来你想说“我希望x存储在
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我得到一个错误:
赋值的左操作数需要左值
我理解这意味着当使用addressof运算符时,生成的指针不是有效的左值,正如c文档中所反映的那样
我的问题是:为什么
我无法更改指向变量x的指针的值的原因是什么?这是为了防止程序员犯错误,还是根本没有意义(在这种情况下,请解释原因)。在这一行:
&x = y;
听起来你想说“我希望x
存储在y
地址中”
x
)时,它的地址(您称之为“指针值”)是一个常量值。这不是“左值”。(“l”表示“左”,赋值操作的左部分,因此是可赋值的。)&x = y;
听起来你想说“我希望x
存储在y
地址中”
x
)时,它的地址(您称之为“指针值”)是一个常量值。这不是“左值”。(“l”表示“左”,赋值操作的左部分,因此是可赋值的。)这里有三个不让你这么做的原因: 这里
&
运算符为您提供变量x
的地址,您正试图为该地址分配一些内容,但这是不可能的,没有意义。如果要更改存储在
x
中的值,只需为其指定:
x = 5;
如果您有一个指针(int*
)y
,并且您希望将其值分配给x
,请使用*
运算符获取值y指向(存储在该地址中)并将其分配给x
:
x = *y;
如果要将指针y
指定给x
,则不可能。使用另一个poiner
int *y1 = y;
这里
&
运算符为您提供变量x
的地址,您正试图为该地址分配一些内容,但这是不可能的,没有意义。如果要更改存储在
x
中的值,只需为其指定:
x = 5;
如果您有一个指针(int*
)y
,并且您希望将其值分配给x
,请使用*
运算符获取值y指向(存储在该地址中)并将其分配给x
:
x = *y;
如果要将指针y
指定给x
,则不可能。使用另一个poiner
int *y1 = y;
在代码中
&x = y
这一行显示一个错误,因为&x是一个常量指针,因此在代码中初始化后无法更改它
&x = y
这一行显示错误,因为&x是一个常量指针,因此在初始化后无法更改可能的重复与
x+1=3
一样有意义。可能的重复与x+1=3
一样有意义。该问题与常量无关,但事实上它不是左值&x
也不是一个具有初始化属性概念的东西。这个问题与const
-ness无关,而是与它不是左值这一事实有关&x
也不是一个具有初始化性概念的东西。