指针(变量)
1.T *p T可以是int, char, double等,p是指针(变量),p的类型T*
*p 类型为T ,它表示存放在地址p处的一个T类型的变量,通过*P可以读取从p开始的sizeof(T)个字节;指针就是地址。
char ch1=‘a’; char * pc=&ch1;(解读:ch1是一个char类型的变量,让指针pc指向ch1;
2.同类型的指针(地址)可以比较大小,可以进行加减运算,可以自增自减
p1-p2=(p1-p2)/sizeof(T) p1,p2为T*类型
p1+n指向地址p1+sizeof(T)
p[i]等价于*(p+i)
*p等价于p[0]
3.地址0不能访问。指向地址0的指针就是空指针,可以用“NULL”关键字对任何类型的指针进行赋值。NULL实际上就是整数0,值为NULL的指针就是空指针:
int * pn = NULL; char * pc = NULL; int * p2= 0;
指针可以作为条件表达式使用。如果指针的值为NULL,则相当于为
假,值不为NULL,就相当于为真
if(p) if(p!=NULL) if(!p) if(p==NULL )
4.通过指针,程序能访问的内存区域就不局限于变量占据的内存区域;对指针p进行加减操作就能访问p指向的前面或后面的内存区域
学习指针之前,我们只能访问已经定义好的变量所占用的内存
5.指针作函数参数main函数swap(&a,&b) void(int *a,int *b)
6.指针和数组的联系
数组的名字是一个指针常量,指向数组的起始地址T a[n]中:a的类型是T*
作为函数参数时,T *a等价于T a[ ]
7.指针变量可以有空值,即该指针变量不指向任何变量
p=NULL;就是使p指向地址为0的单元(无效单元)
它跟p未被赋值是不同的,p未赋值时可能指向任何一个单位,这种情况是很危险的,因此应用指针之前应该对它进行赋值