1、引言
今天我们学习的是C语言中最重要的知识——指针,这篇博客的目的在于初识指针。
2、指针是什么
1、指针是内存中最小单元的编号,也就是地址
2、平时口语中所说的指针,通常说的是指针变量,是用来存档内存地址的变量
要想了解指针首先我们先要了解一些关于内存的知识
1、内存被划分为一个个小的单元,每个单元的大小为1字节
2、当我们需要访问到内存之中的内容时,就需要内存单元的编号——地址
3、指针和指针的类型
1、指针类型决定了指针在解引用的时候一次能访问几个字节 (指针类型限制指针权限),例如 int* 解引用可以访问4个字节,而 char* 解引用只能访问1个字节
2、指针类型决定了,指针向前或向后走一步,走多大的距离,单位是距离
4、野指针
4.1、野指针成因
1、指针未初始化
2、指针越界访问
3、指针指向的空间释放
例如主函数的指针指向了 构造函数的局部变量的地址
4.2、如何避免野指针
1、初始化指针
int a = 10;
int* pa = &a;
或当不知道指针应该指向谁的时候,用空指针
int* p = NULL;
2、在使用指针之前一定要判断指针的有效性
在使用指针的时候,若指针不为空我们才去使用它,若指针为空我们就不使用它
3、小心指针越界
4、指针指向空间释放即使置NULL
5、避免局部变量返回的地址
5、指针运算
5.1、指针加、减整数的运算
举例如下
5.2、指针减指针
1、指针减去指针的前提是两个指针指向同一个空间
2、两个地址相减得到的结果的绝对值,是两个地址之间元素的个数
6、二级指针
7、指针数组
指针数组的本质是数组
小知识
1、地址的产生:
32位 – 32根地址线 --地址线是物理的电线 – 通电产生信号 0/1
64位 – 64根地址线 --地址线是物理的电线 – 通电产生信号 0/1
32位电脑上若是把地址存起来需要4个字节,64位则是8个字节
2、指针运用小练习
3、
局部变量不初始化的时候是随机值
全局变量不初始化的时候默认是 0