[英]Incrementing pointer prints garbage?
我寫了以下代碼:
void incrementNumber(int *num)
{
*num++;
printf("%i\n", *num);
}
int main()
{
int i = 3;
printf("%i\n", i);
int *ptr = &i;
incrementNumber(&i);
printf("%i\n", i);
getchar();
getchar();
return 0;
}
每當我以增量編號輸出num時,它只會打印垃圾,但是如果我將代碼更改為:
void incrementNumber(int *num)
{
*num += 1;
printf("%i\n", *num);
}
它按預期輸出值。 我正試圖擺脫使用引用,所以我可以更好地理解指針因為(像大多數人一樣)我對指針的知識相當有限,所以我試圖更好地掌握它們。
還讓我重新解釋一下這個問題,我知道為什么它輸出那個垃圾值,這是因為它增加了內存地址並在那個位置打印垃圾而不是增加內存地址中包含的值,我想我問的是為什么它是通過增量而不添加來實現的嗎? 它只是這兩個命令編譯成匯編的方式嗎? 有沒有辦法以這種方式增加指針指向的值?
我很高興你明白這一行會發生什么:
*num++;
問題是運營商的優先事項。 我相信'++'優先於'*'(當然,在這種情況下)。 嘗試寫這個,它會按你想要的方式工作:
(*num)++;
我不知道並且剛學到的一件事是在這種情況下指針操作的優先級高於+ =。
這是因為優先: *num++
被評估為num++
然后解除引用。 當您打印下一個值時,它在這種情況下來自無效指針。
如果您使用(*num)++
,您將獲得所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.