【发布时间】:2011-01-23 12:42:25
【问题描述】:
假设定义:
int i = 10;
int *p = &i;
为什么 *p 在这里是一个有效的左值:
*p+=10;
不应该 *p 计算存储在 &i 中的 int 的值,即。 10,因此会产生“非左值”错误?
【问题讨论】:
-
我不知道你为什么被否决。我认为这是一个很好的问题
-
我一直认为
*p是i的同义词,从未遇到任何混淆。 -
*p"当用作右值时,计算为存储在&i的 int 的值"。但是作为一个左值,它和左值i是一样的。 -
*p始终表示“p指向的位置的内容”。将*p解释为左值与右值之间的区别在于,当*p显示为左值时,可以理解其意图是存储到p指向的位置,而当*p用作右值时,可以理解其意图是检索p指向的内存位置的内容。 -
@Kevin - 我对
*p的内心解读是“指针p 的对象”。可能有点罗嗦,但从心理上讲,这会将*p += 10转换为“指针 p 的对象增加 10”。