簡體   English   中英

為什么++(* ptr)遞增指針?

[英]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字符並將其打印為fe + 1 = f

printf("%c\\n", *ptr); 語句只打印指向的字符(及其f ),因為e值隨++(*ptr)更改。

暫無
暫無

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

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