指针
地址如同房间编号, 根据这个编号我们可以找到对应的房间
内存单元如同房间, 房间是专门用于存储数据的
在计算机中所有数据都存储在内存单元中,而每个内存单元都有一个对应的地址, 只要通过这个地址就能找到对应单元中存储的数据.
由于通过地址能找到所需的变量单元,所以我们说该地址指向了该变量单元。将地址形象化的称为“指针”
内存单元的指针(地址)和内存单元的内容是两个不同的概念。
开辟一块空间专门用来存储变量, 这种专门用于存储其它变量地址的变量, 我们称之为指针变量
指针和指针类型
指针变量的定义包括两个内容:
指针类型说明,即定义变量为一个指针变量;
指针变量名;
指针变量初始化的方法有两种:定义的同时进行初始化和先定义后初始化
把指针初始化为NULL
多个指针变量可以指向同一个地址
指针的指向是可以改变的
指针没有初始化里面是一个垃圾值,这时候我们这是一个野指针
C语言中提供了地址运算符&来表示变量的地址。其一般形式为:
&变量名;
C语言中提供了*来定义指针变量和访问指针变量指向的内存存储空间
在定义变量的时候 * 是一个类型说明符,说明定义的这个变量是一个指针变量
在不是定义变量的时候 *是一个操作符,代表访问指针所指向存储空间
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为“二级指针”
数组指针
一个变量有地址,一个数组包含若干元素,每个数组元素也有相应的地址, 指针变量也可以保存数组元素的地址
只要一个指针变量保存了数组元素的地址, 我们就称之为数组元素指针
数组名a不代表整个数组,只代表数组首元素的地址
数组名自带指针
在指针指向数组元素时,允许以下运算:
加一个整数(用+或+=),如p+1
减一个整数(用-或-=),如p-1
自加运算,如p++,++p
自减运算,如p–,--p
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同 一数组中的上一个元素。
数组名保存的是数组第0个元素的地址, 指针也可以保存第0个元素的地址
指向函数指针
函数名就代表着函数的地址
返回值类型 (*指针变量名)(形参1, 形参2, ...);
由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的
函数调用中"(指针变量名)"的两边的括号不可少



