C语言笔记-0607-指针
1、指针的定义和初始化
指针变量的定义: DataType *PName; DataType:可以是任意一种数据类型 PName:合法标识符 *:注意,*在变量定义的时候只是指针变量的标识,在其他位置的时候 标识取出指针指向空间内的值 &:取地址符,通过此符号可以取出变量的地址值 *:间接运算符,通过*可以取出指针指向空间内的数值 变量名:PName PName的类型:DataType *(除去变量名以外的就是变量的类型) PName指向空间存储的数据的类型:DataType
指针的初始化:
不初始化: DataType *PName; //被称为野指针,指向空间不确定,避免野指针 初始化为空: DataType *PName=NULL;//被称为空指针,空指针就是没有指向的指针 NULL其实就是(void *)0 初始化为变量的地址: DataType VarName=value; DataType *PName=&VarName;
2、指针的赋值和指针的使用
指针的赋值
指针的赋值: DataType VarName=value; DataType *PName=NULL; PName = &VarName; 提示: PName是指针变量,用来存储地址的值 *PName是取出PName指向空间内的值 指针可以改变指向
3、指针和数组的关系
数组名即为数组的首地址(同时也是数组首元素的地址),那么可以定义一个指针变量来接收数组的名字,这样指针就指向了数组,因此可以通过指针操作数组
4、指针的加减法(数据):
指针的加法操作(+n)相当于在元数据的地址的基础之上向后偏移(数据类型*n)个字节
指针的减法操作(-n)相当于在元数据的地址的基础之上向前偏移(数据类型*n)个字节
指针与指针之间的减法:
指针与指针的相减,获取的结果是两个数组元素之间的下表差
5、指针与字符串:
字符串字打印的时候只需要告知编译器字符串的首地址即可,原因是每一个字符串都有一个\0作为结尾
我们可以通过数组来存放字符串
数组的名字就是数组的首地址
指针又可以指向地址
所以指针可以直接通过字符串进行初始化
6、指针数组和数组指针
指针数组:
指针在前,数组在后,说明此类型为数据类型为指针的数组,即该类型为一个存放指针的数组
定义格式:
DataType *PName[len]={NULL};
数组指针:数组在前,指针在后,说明该类型为一个数组的指针,即一个指向数组的指针
DataType (*PName)[len]={NULL};
5、多级指针
存放指针的地址的变量
定义:
DataType VarName=value;
DataType *PName=&VarName;
DataType **PPName=&PName;