这可能是一个非常基本的问题,但我无法理解它。我需要一个清晰的理解,因此我张贴在这里。与printf一起使用时char *和int *之间的区别
考虑代码:
char *c = "hello";
int a = 10;
int *b = &a;
printf("%s\t%d\n", c, *b);
为什么我要通过*b
获得价值进行打印,但在字符串中的情况下,如果我只得到C,printf
仍然打印出“你好”?
这可能是一个非常基本的问题,但我无法理解它。我需要一个清晰的理解,因此我张贴在这里。与printf一起使用时char *和int *之间的区别
考虑代码:
char *c = "hello";
int a = 10;
int *b = &a;
printf("%s\t%d\n", c, *b);
为什么我要通过*b
获得价值进行打印,但在字符串中的情况下,如果我只得到C,printf
仍然打印出“你好”?
这正是该说明符的意思是:
%s
要指向一个字符,所以你不必取消对它的引用,printf
将%d
想要一个真正的整数,所以你做必须对其进行解引用这就是printf
总是那样。
因为这就是如何定义printf
。
但它是有道理的;考虑下面的代码:
printf("%d\n", 42);
将相当于码是什么,如果printf
通过指针把整数?
字符串是一种特殊情况; C中的字符串是内存中的一系列字符,通过指向其第一个元素的指针访问。所以你需要给printf
这个指针,这样它才能读取整个字符串。
不要问,只是做。 – 2012-05-15 16:07:13