指针
指针基础
指针概念
- 指针就是地址
地址:内存单元的编号(指针)
每个变量在内存中都有一个地址,这个地址可以通过指针来访问。
- 指针也是一种数据类型
指针类型,这种数据类型是专门用来处理地址这种数据的
指针变量的定义
基类型 *指针变量名;
基类型(数据类型)
整型、浮点型、字符型、数据结构、指针类型、结构体类型、函数类型...
表示该指针类型所指向的内存空间存放什么类型的数据
*
定义时表示此时定义的是一个指针类型的变量
指针变量名
符合标识符命名规则
数据类型 变量名;
int *p; //pointer
p是一个指向int类型数据的指针
int a= 10;//a所在的空间是用来存放 int (整型)类型的数据的
float b=10;// 声明一个浮点型变量b,并初始化为10.0。b所在的空间是用来存放float类型的数据的。
int *p = &a;// 声明一个指向int类型数据的指针p,并将a的地址赋给p。
int *p = &b;// 错误:不能将float类型变量b的地址赋给int类型的指针p。
&a 表示获得a所在空间的首地址,表示 获得了一块 可以存在int型数据的内存空间的地址
int *------整体叫指针类型
int*含义 首先表示是一个 指针类型,表示指向int型数据的指针类型
指针变量的引用
int a= 10;
int *p = &a; p指向a------因为p中保存la的地址
a的数据类型int
&a的数据类型 int*------地址这种数据:对应到指针数据类型
*指针运算符
单目运算、运算对象只能是指针(地址)
*p 表示访问p所指的基类型的内存空间
*p间接访问 :通过指针间接访问变量的值
通过a访问直接访问:通过变量名直接访问变量的值
int main()
{
int a = 10; // 声明一个int类型变量a,并初始化为10
int *p = &a; // 声明一个指向int类型数据的指针p,并将a的地址赋给p
// 直接访问变量a的值
printf("Direct access, value of a: %d\n", a);
// 间接访问变量a的值,通过指针p
printf("Indirect access, value pointed to by p: %d\n", *p);
return 0;
}
指针操作的详细步骤
step1:首先拿出p中地址,到内存中定位
step2:偏移出sizeof(基类型)大小的一块空间
step3:将偏移出的这块空间,当作一个基类型变量来看(*p运算完成效果)
*p运算效果就相当于是一个基类型变量
*p<=>a
*p
访问和操作的是指针p
指向的地址处的值,这正是变量a
所在的内存地址。因此,
*p
就等价于a
。换句话说,
*p
直接操作a
的值,因为p
保存了a
的地址
指针传参
- 指针进阶
指针+一维整型数组
指针+一维字符型数组
- 指针高级
指针+二维整型数组
指针+二维字符型数组
指针的数组
函数指针
指针+指针