关于 printf 语句输出的问题
Having trouble regarding output of a printf statement
我在理解以下代码片段的输出时遇到一些问题。
#include<stdio.h>
int main()
{
char *str;
str = "%d\n";
str++;
str++;
printf(str-2, 300);
return 0;
}
代码的输出是 300。
我明白直到printf
语句之前的那行,str
指向字符-%
。我需要帮助的是理解为什么 printf
函数打印 300.
就在 printf
之前,str
不是 指向 %
,而是指向 \n
。
++
运算符增加 str
的值以指向数组中的下一个字符。由于这样做了两次,因此它指向 \n
。当您随后将 str-2
传递给 printf
时,它会创建一个指向 %
的指针。所以 printf
看到字符串 "%d\n"
导致 300 按预期打印。
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
的值等于 [= 的原始值20=].
(你还记得那个2 - 2 == 0
吗?)
所以上面的语句等同于
printf(str, 300);
当 str
最初由字符串文字 "%d\n"
初始化时
我在理解以下代码片段的输出时遇到一些问题。
#include<stdio.h>
int main()
{
char *str;
str = "%d\n";
str++;
str++;
printf(str-2, 300);
return 0;
}
代码的输出是 300。
我明白直到printf
语句之前的那行,str
指向字符-%
。我需要帮助的是理解为什么 printf
函数打印 300.
就在 printf
之前,str
不是 指向 %
,而是指向 \n
。
++
运算符增加 str
的值以指向数组中的下一个字符。由于这样做了两次,因此它指向 \n
。当您随后将 str-2
传递给 printf
时,它会创建一个指向 %
的指针。所以 printf
看到字符串 "%d\n"
导致 300 按预期打印。
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
的值等于 [= 的原始值20=].
(你还记得那个2 - 2 == 0
吗?)
所以上面的语句等同于
printf(str, 300);
当 str
最初由字符串文字 "%d\n"