簡體   English   中英

以下C程序的輸出是什么

[英]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.

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