# 1. 指针是什么?
可以这么理解,计算机内存通过字节单位分成每一格,每一格代表一个字节,而 64 位的计算机中 int 型占四个字节,float 型占 4 个字节,double 型占 8 个字节,char 型占一个字节,指针占 8 个字节,相当于,存储的每一个数据用指针表示时,都占用八个字节,而每一个数据的用指针表示时,指针都指向的是他们的首地址
- 指针表示的就是数据在内存中的地址
- 指针不是一个数据,而是一个变量
- 指针跟数据一样有数据类型,比如 int、float、char、double 等等
- 当给指针赋值时,不改变指针的地址,而改变的是该地址的值
- 那么得出重要结论:改变量的值方法有两种,通过对变量的值修改;或者通过该变量的地址来改变
- 而指针的类型的作用就是:定义该指针的类型不同,访问的时候权限也不同,比如对指针进行加减,int 型会地址 + 4,而 char 型会地址 + 1
- *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. 指针的运算
- *p 的加减
- p 的加减
- 指针与指针之间的加减