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的地址”是正好是相反的操作。
*(&a)==a,a首先是个变量值,先执行(&a)取得a变量的指针地址,再执行*(&a)取得a变量上的指针地址对应的值。所以这个表达式是两个变量值的比较。&(*p)==p,p首先是个指针变量,先执行(*p)取得指针地址p对应的值,再执行&(*p)取得该值的地址。所以这个表达式是两个指针地址的比较望采纳~