夜阑卧听风吹雨

铁马冰河入梦来

Loading

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;
}
posted @ 2023-05-22 10:13  二次蓝  阅读(271)  评论(0编辑  收藏  举报