一,指针与数组
通常在c语言中定义一个数组用指针来访问,这个数组名字表示数组内第一个元素的首地址。但又两种情况下数组名不代表数组首地址如下图:
二,指针的运算
(1)指针加减整数
形如int类型指针,倘若在指针变量上加减一个整数,就是在指针所指向的地之中加减四个字节。同理char为一个字节,long为八个字节。如果指针指向的是一个int类型数组,则整个数组元素的地址都加数组元素*四个字节。
(2)指针间的减法
两个指针进行相减,所得的差为两个地址间相差的字节数,如相差12个字节,int型指针所得差为3,char型所得差为12。
其中指针间的减法只可以通过两个相同类型的指针来计算,如果两个指针的类型不一致此算式无意义。
(3)指针间的逻辑运算
指针间的<,>,=,<=,>=都是在比较两个指针指向地址的先后。但是需要注意的是,不允许指针与指向数组第一个元素前一个字节的内存位置的指针进行比较。
如p1与p2可以,p1与p3不可以。
三,多级指针
如下所示,在定义一个指针变量时使用了两个**
一级指针:指向一个普通变量
二级指针:指向一个指针变量
int a=0;/一个变量/
int * pa =a;/指向a的地址的指针变量/
int* * ppa = pa;/指向pa地址的指针变量/
/*其中变量名字前的*表示该变量为指针,int表示指向一个int类型变量,int*表示指向一个一级指针*/
四,数组指针
如下所示,定义的是一个数组,里面元素存放的全是指针。
4 数组指针
指向数组的指针 如果指针后面加上了中括号【a】 对应的就是数组的值