簡體   English   中英

C編程語言中的運算符優先級

[英]operator precedence in C programming language

如果我在下面編寫這樣的代碼?

int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++)+= 123;

現在arr []中的元素是什么?

我本來應該將arr []現在設置為{6,130,8,9,10},但是實際結果是{129,7,8,8,9,10},我不知道為什么?

我認為,ptr ++放在了括號內,因此應該首先增加ptr,不是嗎? 增加一個后,它應該指向數組中的第二個元素。

ptr++的值是任何增量之前的ptr值( 副作用是在表達式計算期間的某個時候增加ptr )。

那是*(ptr++)取消引用的值。

如果在后續表達式中取消引用ptr ,則它指向下一個元素,即值為7元素。

如果您想要預期的行為,請使用++ptr (即預增量)。 后加括號時不影響。 換句話說,它與優先級無關。

ptr ++的基本含義是先使用Increment然后使用Increment ,這就是為什么它被稱為Post Increment Operator 這意味着僅當當前指令完成執行並且在后續指令中再次使用該變量時,才會更新變量ptr的值。

對於++ ptr適用的情況恰好相反,它是First Increment然后使用 ,它被稱為Pre Increment Operator

此ptr ++的效果僅在';'之后出現 ptr ++等效於ptr = ptr + 1; 但這只能在該語句的分號之后進行。 在操作*(ptr ++)+ = 123時,ptr值將為arr [0]; 但在該語句之后,ptr等同於arr [1]

暫無
暫無

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

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