任何人都可以解释printf如何在下面打印你好吗?
#include<stdio.h>
void main()
{
char *p;
p="hello";
printf("%s",*&*&p);
}
我知道*&amp; p ...表示p中的值,即字符串“hello”的地址。最初的*&amp;
答案 0 :(得分:7)
如您所说,*&p
表示p
,表示连续*
和&
取消。因此,*&*&p
也变为p
。
正如@Kerrek所说(在评论中){{1}}产生一个左值,所以你再次取其地址。
请注意,您的代码不符合标准。 *&p
必须以main()
作为返回类型。而且您无法将int
分配给非const "hello"
。它必须是char*
。符合标准的符号是:
const char*
答案 1 :(得分:1)
&p
是p
的地址。
*p
是地址p
指向的内容。
*&p
是*(&p)
地址&p
指向的东西 - p
本身(即地址“p的地址”指向的东西) )。
因此,*&p
只是p
- *&
相互取消。您可以重复此操作:*&*&p
仍为p
。您可以无限制地执行此广告:*&*&*&*&*&*&*&*&*&p
也将是p
。
答案 2 :(得分:0)
'*&安培;'互相取消。您将获得p的地址,然后再次取消引用它。所以最终的结果就是p。