这可能是一个非常基本的问题,但我无法理解。我需要一个明确的理解,因此我发布在这里。
考虑代码:
char *c = "hello";
int a = 10;
int *b = &a;
printf("%s\t%d\n", c, *b);
为什么我必须通过*b
来获取要打印的值,但是如果我只是给c printf
打印“hello”?
答案 0 :(得分:3)
这就是说明者的意思:
%s
想要一个指向char的指针,因此您不必取消引用它,printf
将%d
想要一个真正的整数,以便你做必须取消引用它这就是printf
始终如此。
答案 1 :(得分:3)
因为这是printf
的定义方式。
但这是有道理的;请考虑以下代码:
printf("%d\n", 42);
如果printf
通过指针获取整数,等效代码会是什么?
字符串是一种特殊情况; C中的字符串是内存中的字符序列,通过指向其第一个元素的指针访问。所以你需要给printf
指针,以便它可以读取整个字符串。