[英]Evaluation Order of Subscript Operator
在數組的情況下是否存在用於評估表達式的任何順序。 如果表達式E的形式為E1 [E2],其中E1和E2也是表達式,則E1和E2的評估順序是否固定?
這是我的代碼:
#include<stdio.h>
int main(){
int a[5] = {1,2,3,4,5};
(a + printf("1"))[printf("2")];
(printf("3"))[a + printf("4")];
return 0;
}
它顯示輸出為:1243
我用gcc編譯它。
謝謝。
E1[E2]
相當於*(E1 + E2)
。
標准告訴我們“子表達式的評估順序和副作用發生的順序都是未指明的”。 因此, E1[E2]
的評估順序不固定。
N1256 :
6.5表達式
...
3語法指示運算符和操作數的分組。 74)除了后面指定的(對於函數調用()
,&&
,||
,?:
和逗號運算符),子表達式的評估順序和副作用發生的順序都是未指定的。
所以簡短的回答是“不”; 對於像E1[E2]
這樣的表達式,子表達式E1
和E2
的評估順序不固定。
我希望你只是好奇地問這個問題而不是依賴於這種行為;
我附近沒有C標准,但我不明白為什么你不能將操作分成兩個單獨的語句,添加一個顯式序列點。 您和其他人可能不記得將來正確的訂單應該是什么,從而產生維護問題。
int * the_array = E1;
the_array[E2];
//or
int the_index = E2;
E1[the_index];
//is much clearer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.