指针变量在使用之前必须对其进行初始化,使指针变量指向一个确定的内存单元,否则系统会让指针指向一个随机的内存单元,如果该地址正被系统使用着,那么将会带来很大的灾难。
指针变量初始化的一般格式如下:
类型名 指针变量名=初始化地址值
例如:
注意:
(1)任意类型的指针变量都要遵守“先定义,再初始化,后使用”的原则。未经初始化的指针禁止使用。
(2)必须使用同一类型数据的地址进行指针初始化。
(3)不能把一个整数赋给指针变量。
2.指针的运算
(1)通过求地址运算符(&)获得地址值
(2)通过指针变量获得地址值。
可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针指向同一地址。例如,有以下定义:
语句“p=q;”使指针变量p中也存放了变量k的地址,也就是说指针变量p和q都指向了变量k。可以用图8-3来形象地表示变量q、p和k的关系。
(www.xing528.com)
图8-3 指针变量q、p和k的关系
注意:当进行赋值运算时,赋值号两边指针变量的基类型必须相同。
(3)通过标准函数获得地址值。
可以通过调用库函数malloc和calloc在内存中开辟动态存储单元,并把所开辟的动态存储单元的地址赋给指针变量。
(4)给指针变量赋“空”值。
除了给指针变量赋地址值外,还可以给指针变量赋NULL值。例如:
NULL是在stdio.h头文件中定义的预定义符,因此在使用NULL时,应该在程序的前面出现预定义行:#include<stdio.h>。NULL的代码值为0,当执行了以上的赋值语句后,称p为空指针。
语句“p1=NULL;”等价于“p1=0;”或“p1=‘\0’;”。这时,指针p并不是指向地址为0的存储单元,而是具有一个确定的值——“空”。企图通过一个空指针去访问一个存储单元时,将会得到一个出错信息。
【程序实例】
若有以下定义和语句:
则以下语句中,错误的是( )。
A.*q=0; B.w=p;
C.*p=a; D.*p=*w
给一指针赋空值的正确语句是“q=NULL;”或“q=‘\0’;”或“q=0;”。选项B的含义为使指针w指向指针p所指向的存储单元。选项C的含义为使指针p指向变量a所在的存储单元。选项D的含义为将指针w所指的变量值赋给指针p所指的变量。所以,只有选项A是错误的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。