定义的指针变量若没有被初始化,则可能指向系统中任意一块存储空间,若指向的存储空间正在使用,当发生调用并执行某种操作时,就可能造成系统崩溃,因此在定义指针时应使其指向合法空间。　若两个指针指向同一块存储空间,指针与内存使用完毕之后,调用相应函数释放了一个指针与其指向的内存,却未改变另一个指针的指向,将其置空。此时未被释放的指针就变为野指针。　在编程时,可以通过“if(p==NULL){}"来判断指针是否指向空,但是无法检测该指针时否为野指针,所以要避免野指针的出现。　指针的交换　根据指针可以获得变量的地址,也可以得到变量的信息,所以指针交换包含两个方面,一是指针指向交换,二是指针所指地址中存储数据的交换。　(　1)指针指向交换　若要交换指针的指向,首先需要申请一个指针变量,记录其中一个指针原来的指向,再使该指针指向另外一个指针,使另外一个指针指向该指针原来的指向。假设p和a都是int型的指针,则其指向交换示意图如图所示。　具体的实现方法如下:　int　*tmp=NUIL;　//创建辅助变量指针tmp=p;　//使用辅助指针记录指针口的指向p=q;　//使指针p记录指针q的指向g=tmp;　//使指针q指向p原来指向的地址　(2)数据的交换　若要交换指针所指空间中的数据,首先需要获取数据,获取数据的方法在案例一中已经讲解,即使用“*”运算符取值。假设p和a都是int型的指针,则数据交换示意图如图所示。　int　tmp=NUIL;　//创建辅助变量tmp=p*;　//使用辅助变量记录指针p指向的地址中的数据p=q;　//使指针p指向地址中的数据放到q所指地址中p=tmp;　//将p中原来的数据放到q所指地址中　指针和一维数组　一个普通的变量有地址,一个数组包含若干个变量,数组中的每个元素都在内存中占据存做单元,所以每个元素都有各自的地址。指针可以通过变量的地址访问相应的变量,当然也可以根据指针的指向来访问数组中的元素。　以int型数组为例,假设有一个int型的数组,其定义如下:　int　a[5]={1,2,3,4,5};　若要使用指针指向数组中的元素,则其方法如下;　int*　p=NULL;p=&a[0];　//也可写作p=a,是指针指向数组的首地址　过指针访问数组中的其他元素,必须先定义一个指向该数组的指针　本条定义语句与之前的赋值语另外需要注意的是,　数组名是一个地址,在为指针赋值时不可再对其进行取址操作。　本条赋值语句将数组的数组名赋给了指针p,此时p与数组名等价,所以可以像使用数组名一样,使用　下标取值法　对数组中的元素进行取值,其表示为p[下标]　下标取值法指针的实质就是地址　,其实对地址的加减运算并无意义,　地址的值也不允许随意修改　,但是当指针指向数组元素时,对指针进行加减运算能大大提高指针的效率。　若数组指针与一个整数结合,则执行加法操作,例如对以上定义的,指向数组a的指针p,使p=p+1,则指针p将会指向数组中当前位置的下一个元素,即指向数组a1中的元素al1]。这是因为针对数组中的元素执行p+1操作时并非将地址的值进行简单的加1,而是根据数组元素的类型,加上一个元素所占的字节数。在本次p=p+1时,指针实际上加了4个字节(一个int型数据所占的字节),若指针p存储的　P存储的地址原本为0x2016,则运算后的指针存储的地址变为0x2020。　举例:　假设此时指针p指向数组元素a[0],若要使用指针获取数组元素a[2)的值,可以使用如下两种方式。　(1)移动指针,使指针指向a[2],获取指针指向元素的值:　p=p+2;printf　("　&d",*p);　(2)不改变指针指向,通过数组元素指针间的关系运算指针并取值:　printf("%d",*(p+2));　设要获取数组a中的元素a[3],则使用下标法和指针法取值的方式分别如下;　p[3]　//下标取值法*(p+3)　//指针取值法　(3)当指针指向数组元素时,还可以进行减法操作。　此时指针类型相同,因此相减之后的结果为数组元素类型字节长度的倍数,根据这个数值,可以计算出两个元素之间相隔元素的个数.　比如此时指针p1指向数组元素　a[1],指针p2指向数组元素a{3],则执行以下操作,　(p2-p1)/sizeof　(int);　得到的结果为2,表示p1和p2所指的元素之间相隔两个元素,如此一来,不需要具体地知道两个指针所对应的数据,就可以知道它们的相对距离。　两个指针(地址)相加没有意义　内存分配　在程序执行的过程中,为保证程序能顺利执行,系统会为程序以及程序中的数据分配一定的存储空间。但是有些时候,系统分配的空间无法满足要求,此时需要编程人员手动申请堆上的内存空间来存储数据。　C语言中申请空间常用的函数为:　malloc()函数、calloc()函数和realloc()函数,这三个函数包含在头文件"stdlib.h"中,都能申请堆上的空间。　(1)　malloc()函数　malloc()函数用于申请指定大小的存储空间,其函数原型如下:　void*　malloc(unsigned　int　size);　在该原型中,参数size为所需空间大小。该函数的返回值类型为void*,使用该函数申请空间时,需要将空间类型强转为目标类型。