在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,有时对地址,指针和指针变量不区分,统称指针。(地址==指针)
指针的定义: 数据类型 *变量名 例如:int *p
指针的存储类型是指针变量本身存储类型
指针说明时指定的数据类型不是指针变量本身的数据类型,而是指针目标的数据类型,简称为指针的数据类型。
指针在说明的同时,也可以被赋予初值,叫做指针的初始化。
例如: int a = 10; int *p = &a; 也就是 int a; int *p; *p = &a;
引入指针要注意程序中的px、*px 和 &px 三种表示方法的不同意义,设px为一个指针,则:
px,指针变量,它的内容是地址量
*px,指针所指向的对象,它的内容是数据
&px,指针变量占用的存储区域的地址,是一个常量
把一个数组的地址赋给具有相同数据类型的指针
int a[20],*pa;
pa = a; //等价于pa = &a[0]
指针占用的字节数:64位机器下占8个字节,32位机器下占4个字节
指针的运算
指针运算是以指针变量所存放的地址量作为运算量而进行的运算
指针运算的实质就是地址的计算
指针运算的种类是有限的,它只能进行赋值运算、算数运算和关系运算。
例如:
px-py运算的结果是两个指针指向的地址位置之间相隔数据的个数。
因此两个指针相减不是两个指针持有的地址值相减的结果。
两个指针相减的结果值不是地址量,而是一个整数值,表示两指针之间相隔数据的个数。
指针和数组的关系
在C语言中 ,数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址。
一维数组的数组名为一维数组的指针(起始地址)