【发布时间】:2021-01-23 12:05:55
【问题描述】:
假设a 和b 是指针,
我的理解是*--a = *--b 是指使用指针算法从a 和b 中减去1,然后取消引用a 和b 并将它们设置为相等。
这是否等同于
--a;
--b;
*a=*b
同样,什么是
*a++ = *b++;
相当于?
【问题讨论】:
-
你对
*--a = *--b的理解是正确的。而*a++ = *b++应该不难弄清楚。 -
第一个等同于您的建议(
*--a = *--b;等同于--a; --b; *a = *b;——这个问题被编辑了很多,因此我重复我正在评论的内容)。第二个(*a++ = *b++;)等价于*a = *b; a++; b++。 -
但是如果
a == b呢? -
发布增量。原理与您的第一个示例相同,只是它发生在计算表达式之后。
-
@G.Sliepen — 怎么样?只要指针在取消引用时指向有效的某个位置,该代码就具有良好的格式和确定性。这意味着预递减的指针不应该指向数组的开头,因此在计算表达式之前,两个指针都不应该指向数组的开头。 (如果你的意思是
*--a = *--a;,那么你就陷入了未定义的行为——没有人会知道会发生什么。)
标签: c operator-precedence pointer-arithmetic