[英]What will be the output of the following C program
#include<stdio.h>
int main()
{
char *p;
p="%d\n";
p++;
p++;
printf(p-2, 400);
return 0;
}
當我在上面的代碼上運行時,我的輸出是400。但是為什么是400?
首先為p
分配格式字符串。 然后減1兩次。 最后,它的值減去2並通過附加參數400傳遞給printf。
從p
最新值減去2將其移回到原始格式字符串。 因此,printf打印值400。
printf()
的第一個參數是格式字符串。 變量p
是指向字符數組的指針,該數組也是表示字符串的方式。
當給p分配一個字符串"%d\\n"
它說格式化一個整數以打印其值,然后打印回車符。
由於p
是char指針,因此p++
意味着將指針向前移動1個字符。 進行兩次以將p
向前移動2個字符,使其指向回車符的開頭。 p-2
說做指針數學運算,以便在p
指向的前面給出一個char*
2個字符。
這是%d
回車字符串的開頭。 這將成為格式字符串,第二個參數400替換%d
並打印其自身,后跟回車符。
您聲明了一個指向字符串的指針,並為其分配了值"%d\\n"
。 該指針在內存中保存一個地址。
例如,假設您將地址添加到地址6時,它指向地址6(您不應該這樣做,必須始終知道指針指向的位置),然后將地址更改為8。
現在,當您執行printf
您將其替換為地址p
的當前值,指向(8)減去2,即6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.