为什么我们使用%d而不是%p存储变量数据,因为scanf将其作为指针?

时间:2014-09-07 20:47:12

标签: c

我完全知道我必须使用%p来查找变量(&VAR)指针的地址, 但是存储我们使用scanf("%d", &a)而不是scanf("%p", &a)的值 - 但为什么?

我读过一些书,他们说printf("%d", &a)错了,而不是printf("%p", &a)。 根据上面的陈述,我对scanf函数的混淆是我的第一个陈述。 有什么理由吗?

2 个答案:

答案 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);