我有一些与此代码相关的问题。 printf 的参数类型为const char*
和...
(可变参数列表)。
1)为什么程序的输出是d
而不是127
?
2) +1
是否会被转换为字符串并传递给类型为const char*
的参数变量?
#include<stdio.h>
int main()
{
printf("%d"+1 , 127); //how this will get executed?
return 0;
}
输出:
d
最佳答案
第一个参数是指向char
的指针。
文字 "%d"
将是指向 '%'
的指针,它隐含地后跟 'd'
和 '\0'
。它是指向 char
的指针,因为它是字符串文字的 C 表示形式:末尾带有 '\0'
的字符序列;表示用作参数等作为指向 char
的指针。
但是"%d"+1
,根据指针算法,是指向'd'
的指针,后面是'\0'
。< br/>
两者都以零结尾,适合 printf 的参数。
所以输出是一样的
printf("d", ignored);
127 变为“忽略”,即它被忽略,因为 "d"
告诉 printf 不要期待任何东西,因为它没有任何特殊字符序列,例如“%someletter”。所以它不会期望,不会寻找任何东西,也不会在它认为已经给出的完全正常的字符串之外进行任何打印。
但是请注意,附加参数(格式字符串中未包含的任何参数)会被评估并然后 被忽略。这是相关的,因为该评估的任何副作用(例如函数调用)实际上都会发生。
参见例如详情请看这里:
http://en.cppreference.com/w/c/io/fprintf
关于c - 格式字符串参数后 "+1"对 printf() 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729625/