一、什么是指针

地址就是指针,指针就是地址

什么是地址

地址就是内存单元编号

变量是什么找到值的

通过其对应的指针得到对应的地址,就得到了内存编号。

二、什么是指针变量

指针变量就是存放指定数据类型的数据的地址的变量
dataType * varName;

dataType: 指针变量所能存放数据类型的数据的地址 如 int 就表示只能存放int类型的地址 *:
代表这是一个指针变量 varName: 指针变量名 如 float * p; => 定义了一个存放float类型的指针变量p

  1. int * p;//定义了一个整型指针变量,只能存放整型数据的地址。此时没有初始化值,会被系统随机分配垃圾值地址。
  2. printf("%p",p);//系统随机分配的垃圾值地址
  3. intf("%d",*p);//会被强行终止,并抛出错误。因为该内存单元是该程序没有读写权限的
  4. int i = 1;
  5. p = &i;//此时p存放的就是i的地址
  6. printf("%p",p);
  7. printf("%p",&i);
  8. printf("%d",*p);//此时*p就是指针变量的内容的地址,也就是指向指针变量所存放的地址。这里对应的是i的值

注意:
在C语言中,如果没有对变量初始化值的话,系统会默认分配一个垃圾值。
如果定义指针变量的时候并没有赋值,那么系统会随机分配一个垃圾值地址(介于0X0000000-0xFFFFFFF之间)。此时该程序对这块内存单元是没有读写权限的,因为这块内存单元可能是别的程序再占用,如果随意修改,就相当于病毒程序了,这时候访问指针变量所存放的地址就会被强行终止。

三、指针的分类:

  1. 基本类型指针
  2. 指针和数组
  3. 指针和函数
  4. 指针和结构体
  5. 多级指针

四、指针可以用来干嘛

  1. 表示一些复杂的数据结构
  2. 快速传递数据
  3. 使函数能够r返回一个以上的值(实际上就是能够修改实参的值,并不是真正意义的return)
  4. 能够直接访问硬件
  5. 能够方便处理字符串
  6. 是理解面向对象语言中引用的基础