关于 * 和 & 的谜题
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a
和&*pa
分别是什么意思呢?
*&a
可以理解为*(&a)
,&a
表示取变量 a 的地址(等价于 pa
),*(&a)
表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a
仍然等价于 a
。
&*pa
可以理解为&(*pa)
,*pa
表示取得 pa
指向的数据(等价于 a
),&(*pa)
表示数据的地址(等价于 &a
),所以&*pa
等价于 pa
。
对星号*
的总结
在我们目前所学到的语法中,星号*主要有三种用途:
表示乘法,例如int a = 3, b = 5, c; c = a * b;
,这是最容易理解的。
表示定义一个指针变量,以和普通变量区分开,例如int a = 100; int *p = &a;
。
表示获取指针指向的数据,是一种间接操作,例如int a, b, *p = &a; *p = 100; b = *p;
。