我在理解以下代码段的输出时遇到了一些麻烦。
#include<stdio.h>
int main()
{
char *str;
str = "%d\n";
str++;
str++;
printf(str-2, 300);
return 0;
}
代码的输出为300。
我知道直到printf
语句之前的行,str
都指向字符-%
。我需要帮助的是了解为什么printf
功能打印300。
答案 0 :(得分:5)
在printf
之前,str
不是指向%
,而是指向\n
。
++
运算符使str
的值递增以指向数组中的下一个字符。由于此操作已完成两次,因此它指向\n
。然后,将str-2
传递到printf
时,它将创建一个指向%
的指针。因此printf
看到了字符串"%d\n"
,该字符串导致按预期方式打印300。
答案 1 :(得分:3)
2 - 2
等于0
。:)
实际上这两个表达式语句
str++;
str++;
可以像
那样重写str = str + 1;
str = str + 1;
等同于一条语句
str = str + 2;
然后在带有printf的语句中
printf(str-2, 300);
您正在使用表达式str-2
指向字符串文字"%d\n"
的第一个字符,或者表达式str-2
的值等于{{1}的原始值}。
(您还记得str
吗?)
所以上面的陈述等同于
2 - 2 == 0
最初由字符串文字printf(str, 300);
初始化str
时