&为取地址运算符;
*为解地址符;
eg:
#include <stdio.h>
int main()
{
int a=10; //分配内存
int b=20; (b=10)
printf("a address is \n",&a); //打印出a的地址 eg:0xbf3f3f35
printf("b address is \n",&b); //打印出b的地址 eg: 0xbf3f3f31
printf("a = \n",*(&a)); //取a的值 10
printf("b = \n",*(&b)); //取b的值 20
printf("a address is \n",&(*(&a))); //打印出a的地址 0xbf3f3f35
printf("b address is \n",&(*(&b))); //打印出b的地址 0xbf3f3f31 (当b=10 时,此处打印b的地址并不会改变)
}
注意:如果b=10;
&(*(&b))先取b的地址,*解地址后再取地址并不会对*地址后的b的内存(对象)操作。