C 指针:& 与 *
&
表示取一个变量的地址(指针);*
表示取一个变量的值(这个值应该是一个内存地址)对应的变量,对他进行操作,两者相反:
int x = 7;
// 声明一个指针类型的z
int* z;
// 把x的指针赋值给z
z = &x;
// 使用*操作z指针对应的值
--*z;
// 最后,x的值变成6
// 这个例子,声明语句里面的*表示这是一个指针类型(在等号左边)
float x, *ptr = &x;
*ptr = 1.7; // 将1.7赋值给变量x
++(*ptr); // 并将变量x的值加1
补充一个知识点,这点也是之前导致我有所困惑的原因:C 的左值与右值。
*
在左值里,表示这是一个指针类型,在右值里表示取一个指针变量对应内存地址的值
*z
赋值给另一个变量的时候,是把值拷贝过去的。
// 交换两个变量的值:Swap(&a, &b);
void Swap(int* x, int* y) {
// 保存x的值到tmp
int tmp = *x;
// 把x指针对应的值修改为y指针对应的值
*x = *y;
// 把y指针对应的值修改为之前备份的x指针对应的值
*y = tmp;
}