1 int main(int argc, char* argv[]) 2 { 3 int c=1; 4 int *f=&c; 5 cout << &c << endl; 6 cout << f << endl; 7 cout << *f << endl; 8 cout << &f << endl; 9 cout << *&f << endl; 10 cout << &*f << endl; 11 12 return 0; 13 }
运行结果:
这里的 f 和 &f 有啥区别,不是都代表指针的地址吗,为啥他俩的值还不一样?
*&f 和 &*f 又是啥?
一元"&"符号为取指针运算符,即指向该变量的指针的值。
一元"*"符号为取值运算符,即该指针变量所指向的变量的值。
以上是总论。接下来对你的例程中的每一条进行解读。
c是一个int型变量,在初始化时,编译器会给它分配一个地址,这个地址本身被存储在 指向int型的指针 f 中。
因此第一个&c 和第二个f,他们的值是一样的,都是c在内存中的地址,也就是指向c的指针的值。
第三个*f是取出指针变量f所指向的变量的值,也就是c。
第四个&f,是指针变量的指针,也就是f在内存中的地址(f是一个变量,也有相应的内存地址)
第五个和第六个都是互反的运算,也就是说(*&)和(&*)运算相互抵消,留下的就是指针变量f本身的值。
不知道说明白了没有
哦,意思 f 才是c的地址,&f 又是 f 的地址,所以不是c的地址,真晕啊,不过好像懂了,谢谢!