1,指针:
硬件
指针:
指针+ 基本数据类型
指针+ 数组
指针+ 函数
指针+ 指针
2,
指针变量
语法:
基类型* 指针变量名;
基类型 --- 数据类型
基本数据类型
数组类型
基类型 表示 指针变量 指向的目标的 数据类型
* --- 表示此时定义的变量 是一个指针类型的变量
指针变量名 --- 标识符命名规则 + 见名知意
int * p; 表示定义了一个指针类型的变量
int a = 10;
float b = 1.23;
int *p = &a; 指针变量 p 指向 了 int型变量a
p变量的数据类型 int * 指针类型
3,
&b --地址值 ---类型?
float
b有一块内存空间 -- 放的是float类型的数据
&b ---得到了一块 存放着 float类型数据的 空间的地址
float *p1 = &b;
float b = 10;
&b --- > 地址值的类型 -->float *
b的数据类型--决定了这块空间放的的数据类型
&b--获得了 这块空间 的地址编号
float * //这种类型的地址数据
float *p1 = &b;
4,
指针变量:
访问变量时:
直接访问
间接访问 通过地址访问到的
* 指针运算符
* 单目运算
运算数必须是指针类型的值(地址)
*p 过程
1)首先拿出p指针变量中的值(地址) 到内存中定位
2)从定位处开始,偏移出sizeof(基类型)大小的一块空间
3)把这块空间当做一个 基类型的 变量来看
5,
指针的运算:
1. &
2. *
3. p+1 指向了下一个一基类型的数据
跳过了一个基类型
4. p++
6,
指针 + 数组
一维整型数组
int a[5]; a首元素的地址
a[0] -- int型
&a[0] -- int *
int *p = &a[0];
= a;
a[i] <=> *(a+i) //指针运算
野指针 ---指向不明确 ,随机
NULL 表示 0号地址