*
和&
符号在此代码中的含义是什么:
#include<stdio.h>
main()
{
char *p;
p="hello";
printf("%s\n",*&*&p);
}
printf
上述程序中的语句做了什么?具体来说,是什么*&*&p
意思?
这些:
*&*&
是多余的,你永远不会在实际项目中遇到如此荒谬的代码。& 符号获取 的地址p
,星号*
取消引用它以生成原始的char*
。我们来回走...
把它想象成:
*(&(*(&p)))
顺便说一句,您的无类型签名 formain
不会在int
不再假定返回类型的现代编译器上削减它。
将printf
打印字符串"hello"
,因为&
isaddressOf
运算符将返回其后跟的指针的地址,并且*
是valueOf
将返回存储在其后跟的指针地址中的值的运算符。
因此,从本质上讲,该声明*&*&p
将显示为
valueOf(addressOf(valueOf(addressOf(p))))
这将返回"hello"
存储在实际位置的字符串。
希望这会对你有所帮助!