什么是%*d?我知道那%d是用的integers,所以我认为%*d也必须只涉及整数?它的目的是什么?它有什么作用?
int a=10,b=20;
printf("\n%d%d",a,b);
printf("\n%*d%*d",a,b);
Run Code Online (Sandbox Code Playgroud)
结果是
10 20
1775 1775
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 17
所述%*d在一个printf允许您使用一个变量来控制字段宽度,沿着线:
int wid = 4;
printf ("%*d\n", wid, 42);
Run Code Online (Sandbox Code Playgroud)
这会给你:
..42
Run Code Online (Sandbox Code Playgroud)
(每个.角色都是一个空格).将*消耗一个参数wid和d消耗42.
你有的形式,如:
printf ("%*d %*d\n", a, b);
Run Code Online (Sandbox Code Playgroud)
根据标准是未定义的行为,因为你应该在格式字符串之后提供四个参数,而不是两个(gcc如果你提高警告级别,那么好的编译器就会告诉你这个).来自C11 7.20.6 Formatted input/output functions:
如果格式的参数不足,则行为未定义.
它应该是这样的:
printf ("%*d %*d\n", 4, a, 4, b);
Run Code Online (Sandbox Code Playgroud)
你获得奇怪输出的原因是由于未定义的行为.这个出色的答案向您展示了当您不遵守规则时可能出现的问题(以及为什么),特别是与这种情况有关的问题.
现在我不希望这是一个错位问题,因为你正在使用int所有数据类型,但是,与所有未定义的行为一样,任何事情都可能发生.