我在了解以下代码段的输出时遇到了一些困难。
#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"