【发布时间】:2012-03-17 11:10:53
【问题描述】:
这可能是一个非常基本的问题,但我无法理解。我需要一个清晰的了解,因此在这里发布。
考虑代码:
char *c = "hello";
int a = 10;
int *b = &a;
printf("%s\t%d\n", c, *b);
为什么我必须通过 *b 才能获得要打印的值,但如果我只是给 c printf 仍然打印“hello”?
【问题讨论】:
这可能是一个非常基本的问题,但我无法理解。我需要一个清晰的了解,因此在这里发布。
考虑代码:
char *c = "hello";
int a = 10;
int *b = &a;
printf("%s\t%d\n", c, *b);
为什么我必须通过 *b 才能获得要打印的值,但如果我只是给 c printf 仍然打印“hello”?
【问题讨论】:
这正是说明符的意思:
%s 想要一个指向字符的指针,所以你不必取消引用它,printf 会%d 想要一个真正的整数,所以你确实必须取消引用它这正是printf 一直以来的样子。
【讨论】:
因为这就是 printf 的定义方式。
但这是有道理的;考虑以下代码:
printf("%d\n", 42);
如果printf 通过指针获取整数,等效代码是什么?
字符串是一种特殊情况; C 中的字符串是内存中的字符序列,通过指向其第一个元素的指针访问。所以你需要给printf那个指针,这样它就可以读取整个字符串。
【讨论】: