使用C中的*& *& p来理解复杂的指针和运算符地址

时间:2012-09-06 15:20:58

标签: c++ c pointers addressof

任何人都可以解释printf如何在下面打印你好吗?

#include<stdio.h>

void main()
{
 char *p;
 p="hello";
 printf("%s",*&*&p);
}

我知道*&amp; p ...表示p中的值,即字符串“hello”的地址。最初的*&amp;

3 个答案:

答案 0 :(得分:7)

如您所说,*&p表示p,表示连续*&取消。因此,*&*&p也变为p

正如@Kerrek所说(在评论中){​​{1}}产生一个左值,所以你再次取其地址


请注意,您的代码不符合标准。 *&p必须以main()作为返回类型。而且您无法将int分配给非const "hello"。它必须是char*。符合标准的符号是:

const char*

答案 1 :(得分:1)

&pp的地址。

*p是地址p指向的内容。

*&p*(&p)地址&p指向的东西 - p本身(即地址“p的地址”指向的东西) )。

因此,*&p只是p - *&相互取消。您可以重复此操作:*&*&p仍为p。您可以无限制地执行此广告:*&*&*&*&*&*&*&*&*&p也将是p

答案 2 :(得分:0)

'*&安培;'互相取消。您将获得p的地址,然后再次取消引用它。所以最终的结果就是p。