#include<stdio.h>
int main()
{
char *p;
p="%d\n";
p++;
p++;
printf(p-2, 400);
return 0;
}
当我在代码上运行时,我得到输出400.但为什么400?
答案 0 :(得分:2)
首先为p
分配格式化字符串。然后它减少了两次。最后,使用附加参数400将其值减去2传递给printf。
从p
的最新值中减去2会将其移回原始格式字符串。因此printf打印值为400。
答案 1 :(得分:1)
printf()
的第一个参数是格式字符串。变量p
是指向字符数组的指针,也是字符串的表示方式。
当p被赋予字符串"%d\n"
时,它表示格式化一个整数来打印其值,然后打印回车符。
由于p
是一个char指针p++
,意味着将指针向前移动1个字符。执行两次以将p
向前移动2个字符,使其指向回车符的开头。 p-2
表示指针数学在char*
点前面给出p
2个字符。
这是%d
回车字符串的开头。这将成为格式字符串,第二个参数400将替换%d
并打印自身,然后回车。
答案 2 :(得分:0)
您声明了一个指向字符串的指针,并为其指定了值"%d\n"
。该指针在内存中保存一个地址。
例如,假设当你向它添加两个时它指向地址6(你不应该知道指针指向的位置)你将地址改为8。
现在,当您执行printf
时,您将其替换为地址p
的当前值,指向(8)减去2,即6。