gpt4 book ai didi

c++ - 在指针上同时使用前缀和后缀时出现奇怪的输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:14 27 4
gpt4 key购买 nike

给出下面的代码

char buf[] = "asfsf";

char *a=buf;
++*a++;
cout<<*a;

我希望结果是“s”的下一个字符“t”,但结果仍然是“s”。为什么?

为什么++*a++和

不一样
*a++;
++*a;
cout<<*a;

这真的是++i++ 的重复问题吗?我知道++i++ 是未定义的行为,会导致编译错误,但++*i++ 实际上可以运行。我的情况也是未定义的行为吗?

最佳答案

根据语言语法,运算符关联为:

++(*a++)

注意:结合性并不意味着运算顺序。

*a++ 求值为左值,指定 a 最初指向的位置,具有修改 a 的副作用。到目前为止一切正常。

将 prefix-++ 应用于该左值会增加存储在那里的值(将 'a' 更改为 'b')。

虽然这两个增量是无序的,但这不会导致 UB,因为不同的对象正在增加,并且指定后一个位置的左值不依赖于增量。 (它使用 a 的旧值)。

关于c++ - 在指针上同时使用前缀和后缀时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616034/

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