1、内存和地址
内存:储存数据的空间。
地址:位置编号。
举一个生活的例子:你在学生宿舍,你的朋友要找到你,只要他知道你的寝室号就可以很快的找到你,类比与计算机,每一个学生就是一个数据,这些数据存放在内存中(内存类比宿舍),而你可以通过地址来找到这个数据(地址类比寝室号)。
在C语言中给地址取名叫指针。
2、指针变量和地址
1、取地址操作符(&)
假如我们有一个变量a那么如何取得它的地址呢?这里就要用到我们的取地址操作符
a的址=&a
2、指针变量和解引用操作符(*)
指针变量也是一种变量,是用于存放地址的变量。
如何创造一个指针变量呢?
void main()
{
int a = 0;
int* p = &a;
}
如上p就是一个指针变量,p的类型为int*,存放了a的地址。
我们如何通过p来找到a呢?
这里我们只需要用解引用操作符*即可。
通过这个代码可以看出:*p==a。
3、指针变量的意义
我们知道指针变量是储存地址的,长度固定为4/8个字节,那为什么定义指针时还要有不同的类型呢?其实这是为了查找完整的数据,其实指针变量储存的只是第一个字节的地址,那这个数据到底多大?占几个字节?都是不知道的,因此我们需要给指针变量各种不同的类型,
例如:int a=10;int* p=&a;
这里我们就可以知道,在*p的基础上往下再读取3个字节就可以读取完整的数据。
4、const修饰指针
const修饰指针有两种情况
1、const int*p==int const *p
意思是不能改变p指向的变量即不能改变a的量
2、int* const p
意思是不能改变p的指向,即p一种指向a
5、指针的运算
指针的加减
p+1:表示在指向的位置上向后移一个字节。
可以将两个指针变量进行相减得出两个指针相隔几个字节。
也可以将两个字节进行相加,但没有意义。
6、野指针
概念:野指针就是指向的位置不可知,随机的,不确定的。
野指针有三种成因:
1.指针未初始化
2.指针越界访问
3.指针指向的空间释放