[英]Confusion in assignment in c
#include<stdio.h>
int main()
{
int a=0, b=1, c=3;
*((a) ?&b :&a) = a ? b : c;
printf("%d %d %d\n", a, b, c);
return 0;
}
Output:3 1 3
賦值運算符的結合性是從右到左。 所以在這里我們得到了 3 1 3 但是......
#include<stdio.h>
int main()
{
int a=0, b=1, c=3;
*((a++) ?&b :&a) = a ? b : c;
printf("%d %d %d\n", a, b, c);
return 0;
}
Output:1 1 3
My doubt is why 1 1 3 is returned instead of 1 3 3 ?
您在這里所擁有的是未定義行為的表現。
操作順序僅決定操作數的分組方式。 它不規定評估子表達式的順序。
在這個表達式中:
*((a++) ?&b :&a) = a ? b : c;
唯一的保證是a++
將在&b
或&a
之前評估,並且a
將在b
或c
之前評估。 a++
和a
的求值之間沒有順序,因此您可以讀取和寫入沒有順序點的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.