一、什么是指针
什么是地址
变量是什么找到值的
通过其对应的指针得到对应的地址,就得到了内存编号。
二、什么是指针变量
指针变量就是存放指定数据类型的数据的地址的变量dataType * varName;
dataType: 指针变量所能存放数据类型的数据的地址 如 int 就表示只能存放int类型的地址 *:
代表这是一个指针变量 varName: 指针变量名 如 float * p; => 定义了一个存放float类型的指针变量p
int * p;//定义了一个整型指针变量,只能存放整型数据的地址。此时没有初始化值,会被系统随机分配垃圾值地址。
printf("%p",p);//系统随机分配的垃圾值地址
intf("%d",*p);//会被强行终止,并抛出错误。因为该内存单元是该程序没有读写权限的
int i = 1;
p = &i;//此时p存放的就是i的地址
printf("%p",p);
printf("%p",&i);
printf("%d",*p);//此时*p就是指针变量的内容的地址,也就是指向指针变量所存放的地址。这里对应的是i的值
注意:
在C语言中,如果没有对变量初始化值的话,系统会默认分配一个垃圾值。
如果定义指针变量的时候并没有赋值,那么系统会随机分配一个垃圾值地址(介于0X0000000-0xFFFFFFF之间)。此时该程序对这块内存单元是没有读写权限的,因为这块内存单元可能是别的程序再占用,如果随意修改,就相当于病毒程序了,这时候访问指针变量所存放的地址就会被强行终止。
三、指针的分类:
- 基本类型指针
- 指针和数组
- 指针和函数
- 指针和结构体
- 多级指针
四、指针可以用来干嘛
- 表示一些复杂的数据结构
- 快速传递数据
- 使函数能够r返回一个以上的值(实际上就是能够修改实参的值,并不是真正意义的return)
- 能够直接访问硬件
- 能够方便处理字符串
- 是理解面向对象语言中引用的基础