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