# 1. 指针是什么?

​ 可以这么理解,计算机内存通过字节单位分成每一格,每一格代表一个字节,而 64 位的计算机中 int 型占四个字节,float 型占 4 个字节,double 型占 8 个字节,char 型占一个字节,指针占 8 个字节,相当于,存储的每一个数据用指针表示时,都占用八个字节,而每一个数据的用指针表示时,指针都指向的是他们的首地址

  1. 指针表示的就是数据在内存中的地址
  2. 指针不是一个数据,而是一个变量
  3. 指针跟数据一样有数据类型,比如 int、float、char、double 等等
  4. 当给指针赋值时,不改变指针的地址,而改变的是该地址的值
  5. 那么得出重要结论:改变量的值方法有两种,通过对变量的值修改;或者通过该变量的地址来改变
  6. 而指针的类型的作用就是:定义该指针的类型不同,访问的时候权限也不同,比如对指针进行加减,int 型会地址 + 4,而 char 型会地址 + 1
  7. *int x = 10;p = &x 表示指针变量 p,代表该变量指向的数据;p 表示指针地址,代表该数据的存储首地址
#include <stdio.h>
int main()
{
 int n = 0x11223344;  //16 进制的 int 数据
 char *pc = (char *)&n;
 int *pi = &n;// 将变量 n 地址存入到指针型数据 pi 里
 *pc = 0;   // 此时通过地址将数据值改变
 *pi = 0;  
 return 0;
}

# 2. 在计算机中如何存放数据

​ 当我们在计算机中定义一个变量类型(值可以是数据,也可以是数组等),此时会在内存中开辟一个随机的空间,该地址不是固定的,而是每次使用都是不一样的,空间大小遵循 int、float、double 数据类型

# 3. 指针注意事项

int test()
{
    int a = 10;  // 此时定义的 a 当调用以后就会内存释放
    return = &a;
}
int main()
{
    int *p = test();
    *p = 20;
}// 所以此代码会报错,即为野指针

# 4. 指针变量

​ 指针变量跟正常的数据类型一样的,分为几种如整型,字符型,浮点型等等

​ p 就是指针变量,接收的是数据在内存中的存储地址

​ *p 接收的是指针变量 p 对应地址的数据,这个写法代表对指针变量 p 进行解引用,从而得到数值

// 指针变量写法
int main()
{
    int n = 10;
    int *p = &n;  // 这是定义一个指针,而且未对指针进行初始化,此时 * p 接收的是数值
    p = &n;// 上述一行代码其实应该写为这样就更加清除方便了,** 获取变量 n 的地址 **
    *p;		// 指针变量 p 进行解引用,获取数值
}

# 5. 指针的运算

  1. *p 的加减
  2. p 的加减
  3. 指针与指针之间的加减