C语言里,*(&a)==a,&(*p)==p的区别

大神们哪位知道,C语言里,*(&a)==a,&(*p)==p的区别
最新回答
晚街

2024-11-26 07:02:52

a和p是变量,&a和*p是表达式,1和0x1000是常量
a和*p表示的都是整形左值,p和&a表示的都是指针型左值,1和0x1000表示整形和指针型右值。(左右值的概念不清的话,google一下)
在内存中,a和p有存储空间空间,a存放着1,p存放着0x1000,*p和&a没有空间,他们的运算结果是在寄存器中存放的,1和0x1000也有空间,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指针变量,*是解引用操作符,*p是一个表达式,含义是“对指针变量p进行解引用操作”,这与表达式&a的含义“取整形变量a的地址”是正好是相反的操作。
淡定是葱de风格じ丶

2024-11-26 07:49:06

*(&a)==a,a首先是个变量值,先执行(&a)取得a变量的指针地址,再执行*(&a)取得a变量上的指针地址对应的值。所以这个
表达式
是两个变量值的比较。
&(*p)==p,p首先是个指针变量,先执行(*p)取得指针地址p对应的值,再执行&(*p)取得该值的地址。所以这个表达式是两个指针地址的比较

望采纳~
天生小仙女

2024-11-26 07:12:07

*(&a)==a恒成立
&(*p)==p恒成立
但第二个要求p是指针类型