为什么printf(“%d”+1)的输出是d但printf(“%%% d”+ 1)是%d?

时间:2015-08-19 12:40:02

标签: c

为什么是

的输出
#include<stdio.h>
void main()
{
printf("%d"+1);
}

d ,但

的输出
#include<stdio.h>
void main()
{
 printf("%%%d"+1);
}

%d 而非 %% d ??

3 个答案:

答案 0 :(得分:2)

"%d"+1通过指针算法将您带到char数组中的第d个字符。

在字符串文字"%%%d"+1中,您"%%d"会被%d解释为printf。由于%%已转义为%

答案 1 :(得分:1)

你正在做指针运算。 "%d"+1"d""%%%d"+1"%%d"(就像您正在跳过字符串的第一个字符一样)。

但是,正如documentation of printf()所解释的那样,百分号(%)是字符串格式参数printf()中的特殊字符。它引入了转换规范&#34;。

因为它是一个特殊字符,所以它需要一个特殊的序列(实际上是转换规范)才能打印文字%。指定用于打印文字%的转换规范正好是%%,您可以从文档中转换规范表的第一行看到。

答案 2 :(得分:1)

您在+1中使用的是printf,而%将依次跳过一个字符%。在跳过%%d字符后,您将使用%%,因为%用于打印%d个字符。输出将为Shallow Nesting