------- android培训、java培训、期待与您交流! ----------
地址的概念
1、计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节),为了方便管理,必须为每一个单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个唯一的地址。
内存地址——内存中存储单元的编号
2、在地址所标识的存储单元中存放数据。
注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。
变量地址——系统分配给变量的内存单元的起始地址
指针的基本概念?
在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4 个单元,字符量占1个单元等,为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。
内存单元的指针和内存单元的内容是两个不同的概念。
使用指针的好处
A.为函数提供修改调用变量的灵活手段;
B.让函数有多个返回值;
C.可以改善某些子程序的效率;
》在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。
D.为动态数据结构(如二叉树、链表)提供支持
变量的存取方式
存取方式分为两种:直接存取和间接存取
直接存取:变量的赋值和取值
间接存取:通过指针(地址)间接操作完成
指针变量
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
注意:
严格意义上说,指针是一个地址,是一个常量
指针变量是存放一个地址,是一个变量。
定义一个指针变量
对指针变量的定义包括三个内容:
1)指针类型说明,即定义变量为一个指针变量;
2)指针变量名;
3)变量值(指针)
其一般形式为:
类型说明符 *变量名;
其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。
注意:
1)“*”,必须得有,如果没有就相当于定义了个普通变量
2)指针变量不能用来存放数值或字符之类的
3)指针变量,归根结底还是变量,也有全局和局部变量之分
指针变量的初始化方法
设有指向整型变量的指针变量p,如要把整型变量a的地址赋予p可以有一下两种方式:
1、定义的同时进行初始化
2、先定义后初始化
如果一个指针变量定义以后,不进行初始化,这个指针变量存放的是一个垃圾数,称之为野指针,一定要避免操作野指针,否则会发生不可预知的错误。
3、定义了一个指针变量,但是不知道让这个指针指向谁
int *p = NULL;
int *p = 0;
多个指针可以指向同一个地址
指针的指向是可以变的
“*”的两种用法
1)用于定义一个指针变量
2)存取指针对应存储区域的内容
指针的应用场景:
1)在被调函数中可以修改主调函数中的变量的值
2)让函数有多个返回值
二级指针介绍
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。也称为“二级指针”。
通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“一级指针”。而如果通过指向指针的指针变量来访问变量则构成“二级指针”。
数组指针
数组名是常量 不能进行自增自减运算
一维指针数组
一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为:
类型说明符*数组名[数组长度]
两指针变量只有减法运算
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。
实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。
二维数组指针的定义
一般形式:
数据类型(*指针变量名)[二维数组列数];