[英]Why does ++(*ptr) increment the Pointer?
因此,我是C語言的新手,並用指針測試了一些東西,並且對以下printf有疑問:
char txt[] = "thisIsAQuestion";
char *ptr = &txt[9];
printf("%c\n", ++(*ptr));
printf("%c\n", *ptr);
因此,按照我的“知識”,它將像這樣:
指針指向值“ e”。 然后,如果我執行第一個printf,則首先執行的是()中的命令,因此取消了對指針* ptr的引用,因為它比“前綴增量”具有更高的優先級。 現在我想的是,++的行為將類似於(* ptr +1),因為指針已經被取消引用,並且會增加指針所指向的值,但不會更改指針本身。 因此它將是“ f”。
但是現在當我運行第二個printf時,它顯示了指針仍然指向'f'並且沒有“返回”到'e'。
我的想法有誤嗎? 還是還有其他我沒有考慮的東西?
您缺少該部分,因為指針指向一個地址,而前綴++
運算符會更改操作數的值。
++的行為類似於(* ptr +1)
不,它的行為類似於*ptr = (*ptr + 1)
。
因此, (*ptr)
得出e
的值(如預期的那樣),然后通過應用++
,該值將遞增並存儲到同一內存位置。
前綴增量運算符的結果是新值,該新值將作為新參數傳遞給printf()
-它會打印該值。
對於第二個printf()
語句,您已經在打印增量值。
相關內容,引用C11
,第6.5.3.1節
前綴
++
運算符的操作數的值增加。 結果是遞增后操作數的新值。 表達式++E
等效於(E+=1)
。[...]
char *ptr = &txt[9];
指向txt
但從e
字符開始。
printf("%c\\n", ++(*ptr));
語句首先增加e
字符並將其打印為f
( e
+ 1
= f
)
和printf("%c\\n", *ptr);
語句只打印指向的字符(及其f
),因為e
值隨++(*ptr)
更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.