gpt4 book ai didi

c - 如何计算包含多个 ^= 运算符的表达式?

转载 作者:行者123 更新时间:2023-12-02 09:33:18 24 4
gpt4 key购买 nike

#include<stdio.h>
int main(){

int arr[ 5 ] = { 1, 2, 3, 4, 5 };

int *f = arr;

int *l = (4+arr);

while(f<l){

*f^=*l^=*f^=*l;

++f; --l;
}

printf("\n%d\t%d\t%d\n", *arr, *f, *l)

return 0;

}

我的输出在纸上是 1 3 3 但编译器显示 033。请任何人向我解释一下。提前致谢。

最佳答案

*f^=*l^=*f^=*l; 

^= 操作数的计算没有顺序,并且您在同一表达式中多次使用相同的变量,中间没有顺序点。

这意味着程序的行为未定义。没有人知道该表达式将如何求值,任何事情都可能发生。程序可能会崩溃或者输出可以是任何内容。

您必须通过将代码更改为以下内容来修复此错误:

*f ^= *l;
*l ^= *f;
*f ^= *l;

那么每个分号都会引入一个序列点,不存在求值顺序问题。

Standard references.

关于c - 如何计算包含多个 ^= 运算符的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458248/

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