与printf一起使用时,C中的char *和int *之间的差异

时间:2012-03-17 11:10:53

标签: c pointers printf

这可能是一个非常基本的问题,但我无法理解。我需要一个明确的理解,因此我发布在这里。

考虑代码:

char *c = "hello";
int   a = 10;
int  *b = &a;
printf("%s\t%d\n", c, *b);

为什么我必须通过*b来获取要打印的值,但是如果我只是给c printf打印“hello”?

2 个答案:

答案 0 :(得分:3)

这就是说明者的意思:

  • %s想要一个指向char的指针,因此您不必取消引用它,printf
  • %d想要一个真正的整数,以便你必须取消引用它

这就是printf始终如此。

答案 1 :(得分:3)

因为这是printf的定义方式。

但这是有道理的;请考虑以下代码:

printf("%d\n", 42);

如果printf通过指针获取整数,等效代码会是什么?

字符串是一种特殊情况; C中的字符串是内存中的字符序列,通过指向其第一个元素的指针访问。所以你需要给printf指针,以便它可以读取整个字符串。