C-在printf语句的输出方面遇到麻烦



我在了解以下代码段的输出时遇到了一些困难。

#include<stdio.h>
int main()
{
    char *str;
    str = "%dn";
    str++;
    str++;
    printf(str-2, 300);
    return 0;
}

代码的输出为300。

我理解,直到printf语句之前的行之前,str指向字符%。我需要帮助的是了解为什么printf功能打印300。

printf之前,str不是指向%,而是指向n

++操作员会增加str的值,以指向数组中的下一个字符。由于这是两次完成的,因此指向n。然后,当您将str-2传递给printf时,它会创建一个指向%的指针。因此,printf看到字符串"%dn",该字符串按预期打印300。

2 - 2等于 0。:(

实际上这两个表达式语句

str++;
str++;

可以像

一样重写
str = str + 1;
str = str + 1;

等于一个语句

str = str + 2;

然后在用printf

的语句中
printf(str-2, 300);

您使用的是表达式str-2指向字符串文字"%dn"的第一个字符或表达式str-2的值等于str的原始值。

(您还记得2 - 2 == 0吗?(

因此上述语句等于

printf(str, 300);

str最初由字符串文字"%dn"

初始化时

最新更新