一、指针声明

1.1、“ * ” 符号表示指针

  1. int* point;

1.2、指针指向另一个指针

两个星号**表示

  1. int** point;

二、* 运算符

用来取出指针变量所指向的内存地址里面的值。

2.1、运算前必须初始化

  1. //声明指针变量之后,编译器会为指针变量本身分配一个内存空间
  2. //但是这个内存空间里面的值是随机的
  3. int* p;
  4. *p = 1; // 错误
  5. //NULL在 C 语言中是一个常量,表示地址为0的内存空间
  6. //这个地址是无法使用的,读写该地址会报错。
  7. int *d = NULL; //初始化值为NULL,分配空间
  8. int a;
  9. int *a1;
  10. //初始化指针 a1 指向 变量a
  11. a1 = a;
  12. //在执行运算,实际是操作变量 a
  13. *a1 = 1+2;
  14. printf("%d\n",*a1);

三、& 运算符

& 运算符用来取出一个变量所在的内存地址。

3.1、& 取出内存地址

  1. #include <stdio.h>
  2. /**
  3. * @brief
  4. * 指针学习
  5. *
  6. */
  7. void increment(int *p)
  8. {
  9. //修改 指针 *p 指向的值 x
  10. *p = *p + 1;
  11. };
  12. int main(int argc, char const *argv[])
  13. {
  14. int x = 1;
  15. increment(&x);
  16. printf("%d\n", x); // 2
  17. return 0;
  18. }

3.2、&运算符 与 *运算符 互为逆运算

  1. int i = 5;
  2. //&i 取出 变量i 的内存地址
  3. // *(&i) 取出 变量 i 内存地址指向的值
  4. if (i == *(&i)) // 正确

参考