2024年6月2日发(作者:)
7.7 指针的使用
指针与其他变量一样,必须先定义后使用,而且必须先初始化。否则,指针就是一个
野指针,使用这样的野指针会造成不可预期的后果。本章7.4节中详细讨论了指针初始化
的问题,这一节就来讨论一下指针使用方面的问题,这包括两方面:赋值和取内容。
7.7.1 指针的赋值
在7.4节讲过指针的初始化,赋值与初始化基本类似,7.4节谈到的初始化方法都适用
于赋值。但两者也有一些细微的差别。初始化多发生在定义时,而赋值则多在定义以后。
初始化时如果不是字符串,则右值只能使用地址。因为,此时指针还没有指向特定的内存
单元,所以不能给它赋数据。字符串实质是字符数组,字符数组是天生的指针。系统会自
动为字符串分配存储单元,并且数组的名字就是字符串的首地址指针。此时实质还是地址。
赋值可以赋地址或数据,格式如下所示。
1. p1=&var;
2. p1=p2;
3. *p1=var;
第1个式子中,p1是指针变量,var是变量。&是取地址运算符(格式参7.4节),取
出变量var的地址。所以,第1个式子表示让指针指向变量var。第2个式子中p1和p2
是同类型的指针,表示让p1指向p2所指的内存单元。第3个式子中,p1是指针变量,
var是变量。*是间接操作符,表示间接访问p1指向的内存单元。该式表示直接用变量var
来修改指针所指向的内存单元的内容。赋值时,若左值不带*,则只能赋予地址;否则只能
赋予变量的内容。
【示例7-17】 演示指针的赋值方法。
1. int main(void)
2. {
3. int iVal=5;
4. int *p1=&iVal; //取变量地址
5. int *p2=p1; //用指针赋值
6. int *p3=0; //指针赋为空
7. p3=new int; //申请内存空间
8. *p3=100; //修改所指内容
9. delete p3; //释放
10. p3=0; //置空
11. return 0;
发布评论