%p 在 C 中可以用来打印指针类型的数值。如:

void *a;

printf("a: %p\n", a);

%n 虽然是在函数 printf 中使用,但是它的作用却是给变量赋值的。赋什么值呢?就是%n之前 打印出的字符个数。如:

printf("This is 29 characters before %n", &n);
printf("n: %d\n"); // 29

第一个 printf 中,%n 前面有 29 个字符(加空格),所以 n 的值就是 29。

以上。