gpt4 book ai didi

后递增的连续指针赋值

转载 作者:行者123 更新时间:2023-12-02 08:37:18 26 4
gpt4 key购买 nike

我在 C 中遇到了这段代码:

*p++=*q++=*r++;

在我看来这是错误的,因为我不记得 C 语言中的任何规则指定何时 ++在 q 之后应该实际进行 - 在 *p++ 之间的分配之前和 *q++ ,还是之后?

因此我的印象是,这很可能是未定义的行为,但无法确定C标准(C89 或 C99 ) 这是考虑到的。

这是非常感谢语言警察的帮助的地方。请阐明。

最佳答案

此代码的行为完全不依赖于 ++ 何时实际执行。行为定义明确。

使用增量的后缀形式的事实仅仅意味着指针的原始值被用作增量的结果。 IE。整个事情等同于

old_p = p;
old_q = q;
old_r = r;

*old_p = *old_q = *old_r;

p = p + 1;
q = q + 1;
r = r + 1;

请注意,您可以以完全任意的方式自由移动物理增量,如

old_p = p;
old_q = q;
old_r = r;

p = p + 1;
q = q + 1;

*old_p = *old_q = *old_r;

r = r + 1;

只要在赋值中使用原始指针值,代码的语义就不会改变。

另请注意,必须存储原始值才能在赋值中使用。编译器可以通过递减重新评估原始值来恢复原始值。 IE。编译器甚至可以将你的表达式翻译成类似的东西

p = p + 1;
q = q + 1;

*(p - 1) = *(q - 1) = *r;

r = r + 1;

关于后递增的连续指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com