【发布时间】:2020-05-25 06:54:34
【问题描述】:
当谈到 C 中的表达式时,我试图理解 R 值和 L 值,并且我知道许多表达式不是有效的 L 值,因为最终结果的地址是未知的。这是因为在许多情况下,表达式中使用了变量的副本,因此副本的地址是未知的。例如,
char ch = 'a';
char *p = &ch;
p + 1; //This expression can be used as an R-value, but not an L-value
我相信表达式中发生的事情(如果我错了,请纠正我)是创建了 p 的副本,将 1 添加到该副本中,以便 p+1 指向 ch 之后的字符,但是这个新的 p+1 指针的地址是未知的,所以它不能用作 L 值。
复制变量并在表达式中使用副本的行为是否发生在 C 中的所有表达式中?例如,如果我有
int a = 100;
int b = 25;
a - b;
是创建了变量a的副本(并存储在未知位置)和创建了变量b的副本(b的副本也存储在未知位置),副本中的数据用于减去然后结果存储在另一个未知位置,还是从原始变量中提取数据,减去,然后将结果存储在未知位置?
【问题讨论】:
-
在你的最后一段中,两个选项都是一样的