#include <stdio.h>
int main()
{
short int a = 5;
printf("%d" + 1, a);
return 0;
}
代码打印printf
中用引号括起来的字母表,而不管变量a
的值和类型如何。如果添加任何其他数字,除了1没有打印。
为什么会这样?
答案 0 :(得分:5)
不确定,我当然希望它只打印d
。那是我测试时发生的事情。
如果添加超过1(或2)的所有投注都已关闭,并且您传递的是未定义的行为,以传递随机指针而不是有效的格式化字符串。
答案 1 :(得分:3)
在编译上面的代码时,您应该收到如下警告:
[Warning] too many arguments for format [-Wformat-extra-args]
现在删除printf
的参数a
。
printf("%d" + 1);
这将打印d
。
100 101
% d
^
|
Here is the starting address of the string.
%d
是一个字符串,起始地址为100. "%d" + 1
会为您提供地址101
。
答案 2 :(得分:1)
你为什么要这样做? 如果你想要你可以做到 喜欢
printf("%d", a+1);
答案 3 :(得分:1)
试试这个,你会明白放松是什么让你理解
#include <stdio.h>
int main()
{
short int a = 5,b = 4;
printf("%d %d" + 4, a,b);
return 0;
}
输出:d
因为它在printf()语句中使用双引号内的第4个字符..
如果数字为3
输出:5
如果数字是2
输出:5
如果数字是1
输出:d