簡體   English   中英

c 中的分配混亂

[英]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將在bc之前評估。 a++a的求值之間沒有順序,因此您可以讀取和寫入沒有順序點的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM