任何人都可以在下面解释 printf 如何打印 hello 吗?
#include<stdio.h>
void main()
{
char *p;
p="hello";
printf("%s",*&*&p);
}
我知道*&p...表示p 中的值,即字符串“hello”的地址。最初的 *& 发生了什么
正如你所说,*&p
意味着p
,这意味着连续*
和&
取消。因此也*&*&p
变得p
。
正如@Kerrek 所说(在评论中)*&p
产生一个左值,所以你再次获取它的地址。
请注意,您的代码不符合标准。main()
必须int
作为返回类型。而且您不能分配"hello"
给非常量 char*
。一定是const char*
。一个标准的符合代码是这样的:
#include<stdio.h>
int main()
{
const char *p = "hello";
printf("%s",*&*&p);
}
&p
是 的地址p
。
*p
是地址指向的东西p
。
*&p
是*(&p)
地址所指向的东西&p
——它p
本身(即地址“p 的地址”所指向的东西)。
因此事实证明,这*&p
只是p
-*&
相互抵消。您可以重复此操作:*&*&p
仍将是p
. 您可以无限执行此操作:*&*&*&*&*&*&*&*&*&p
也将是p
.
'*&' 相互抵消。您正在获取 p 的地址,然后再次取消引用它。所以最终结果将只是 p。