我完全知道我必须使用%p
来查找变量(&VAR
)指针的地址,
但是存储我们使用scanf("%d", &a)
而不是scanf("%p", &a)
的值 - 但为什么?
我读过一些书,他们说printf("%d", &a)
错了,而不是printf("%p", &a)
。
根据上面的陈述,我对scanf
函数的混淆是我的第一个陈述。
有什么理由吗?
答案 0 :(得分:1)
原因是printf
只关心价值;它并不关心它来自哪里。因此,要打印整数,只需使用printf("%d", a)
即可。您也可以使用常量整数,如printf("%d", 42)
。
但是,由于scanf
读取整数并将其存储起来,因此需要知道将其存储到何处。因此,您必须传递变量的地址,scanf
将整数存储到变量中。
答案 1 :(得分:0)
格式指令& scanf()
和printf()
的说明符有相似之处,但它们的规格是独立的。期望一个的功能并将其应用于另一个具有局限性。
示例"%d"
和"%i"
对printf()
执行完全相同,但scanf()
略有不同。
// %d needs a corresponding address of an int.
// By providing an address, scanf() knows where to store the int it scans.
int i;
scanf("%d", &i);
// %d needs a corresponding int.
// By providing an int, printf() knows what int to print.
int j;
printf("%d", j);