一、指针概念指针的概念主要是地址和编号内存的每个单元空间都是有地址或编号指针变量就是存储地址的变量所以指针就是地址用于存储和使用地址。二、指针变量的创建及大小1. 指针变量的创建指针变量创建指针类型 * 指针名;代码块 char* n; int* p; short* m; int main() { int a 10; int* p a; return 0; }创建整形指针变量 p 将整形变量 a 的地址存入指针变量中。2. 指针变量的类型指针变量类型跟指向对象的类型有关当指针变量指向的是char类型的变量时指针类型为char*以此类似整型变量int的指针变量为int*当时数组变量char时指针变量为char (*p)[]指针变量如下表为例指针变量类型指针变量指向对象变量类型char* p;char p;int* p;int p;long* p;long p;char (*p)[10];char p[10];int (*p)[10];int p[10];int* p[10];指针数组存储指针的数组int* p;指针变量为什么需要根据指向对象的类型指定类型呢因为当指针变量进行加减和运算时存在权限的问题如char*类型的指针变量在进行指针1时指针往后挪动一个字节因为char类型的大小就是一个字节所以char* 指针的权限就是一个字节若int* 指针因int指针大小为4各字节给int* 指针1往后挪动4各字节大小。3. 指针变量的大小指针变量主要是存储地址以32位机器为例有32跟总线就有32位数字组成地址就是有32为bit 位8各bit 比特位占一个字节32位 bit 位占4各字节也就是32位机器的内存地址是由32位bit位组成所以占用4各字节指针变量的大小为 4 个字节4. 指针变量的操作符指针变量的操作符 “ * ” 为解引用操作符可以将指针变量地址指向的数据解读出来#include stdio.h int main() { char name Q; char* n name; printf(%c, *n);//用 “ * ” 解引用从操作符打印指针 n 指向的name变量的内容 return 0; }取地址操作符 “ ” 功能是将变量等的地址取出的操作符可以赋值给指针变量三、const修饰指针为什么要修饰指针变量为了不让指针变量用解引用来修改原数据或不让改变指针变量指向的对象int main() { int add 20; int* d add; *d 30; return 0; }const 修饰指针变量有三种形式1. cons char* p; —修饰不能用 *p 将指向对象的值进行更改2. char* const p; —修饰不能改变 p 指向的对象3. const char* const p; —修饰不能改变 p 指向对象而且不能更改 p 指向对象的值四、野指针、空指针野指针不清楚指针所指向位置为何处就叫野指针野指针很危险因为当使用野指针时不知道它所指向的地址为了避免形成野指针使用完指针变量之后将指针位置为NULL。空指针指针 / 变量没有指向任何对象、数据、内存它的值是空null不是有效数据一旦你试图使用它就会直接报错崩溃五、指针运算指针运算1. 指针加减1加减1指针可以将指针前后移动从而可以访问前后的位置2. 指针相减可以得到指针之间的元素个数六、二级指针二级指针时指向一级指针的变量存储的时一级指针的地址。