指针

一:定义
指针:①保存变量的地址;
②内存以字节为单位存储数据,操作系统给每个存储单元分配了一个编号,从0x00000000-0xffffffff,编号就是地址;
③int a=0x234f,变量a占2个字节,有2个地址编号,但变量a的地址是它的整个存储空间的最小地址:0x01

指针
二、指针的跨度和宽度
①指针变量的类型:将变量名拖黑,如char p,将p拖黑,及指针变量的类型是char 类型;
②指针变量的保存类型:将变量名和离它最近的
拖黑,如char p,将p拖黑,即指针变量p保存char类型变量的地址;
③指针变量(p)的跨度和指针变量的取值宽度(p)由指针变量的保存类型决定;
指针
三、指针的分类(指针具体指向哪个位置)
1、int
:整形指针变量:保存整形变量的地址;
char
:字符指针变量:保存字符变量的地址;

2、int(*p)[4]:数组指针,也叫行指针,指针p指向一个具有4个元素的一位数组。
p=arr,即数组指针名和二维数组名完全等价(列数需相同);
3、int**p:二级指针,指向一级指针的地址,可用于链表的传参以改变一级指针保存的地址。
二级指针和二维数组没有关系;

指针
指针
四、注意事项
1、不能保存未申请空间的地址
int p=2000(错);
char p=“ssss”(不会报错,但只能整体读取,不能写,也不能单个取值p[2]);
2、如果一个指针变量刚开始不知道指哪,就赋值null。因为null就是0x00000000地址,该地址不允许访问,会报错。但最好一开始就给指针变量申请空间,如char p=(char)malloc(6),这样的话后续可以用sccanf解包或者ssprintf解包;
3、void
p是万能指针,可以保存任何类型的地址,常用于函数的形参设置,这样设置的话,就可以接任何指针类型的参数;但不能访问
p,因为不知道取值宽度;
4、p++,p的指向地址已经改变,p+1,指向地址未改变;
指针