为什么是
的输出#include<stdio.h>
void main()
{
printf("%d"+1);
}
是 d ,但
的输出#include<stdio.h>
void main()
{
printf("%%%d"+1);
}
%d 而非 %% d ??
答案 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
。