任何人都可以在下面解释 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。