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

Roh*_*hit 0 c c++ pointers addressof

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

#include<stdio.h>

void main()
{
 char *p;
 p="hello";
 printf("%s",*&*&p);
}
Run Code Online (Sandbox Code Playgroud)

我知道*&p ...表示p中的值,即字符串"hello"的地址.最初发生了什么*&

Naw*_*waz 7

如你所说,*&p意味着p,这意味着连续*&取消.因此也*&*&p成了p.

正如@Kerrek所说(在评论中)*&p产生一个左值,所以你再次获取它的地址.


请注意,您的代码不符合标准.main()必须具有int返回类型.而你不能分配"hello"非const char*.一定是const char*.符合标准的符号代码如下:

#include<stdio.h>

int main()
{
   const char *p = "hello"; 
   printf("%s",*&*&p);
}
Run Code Online (Sandbox Code Playgroud)

  • 也许值得注意的是`*&p`是一个左值,所以你可以再次获取它的地址...... (2认同)