Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46993
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 28
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-16 14:42
文章分类
文章存档

2015年(16)

2014年(3)

我的朋友

分类: C/C++

2015-12-05 17:58:19

原文地址:指针的赋值——futter 作者:futter521

    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;  
    12. }

分析:该示例中指针变量p1、p2的初始化和赋值是一样的过程,而p3则是先初始化,再赋值。赋给p1的是变量iVal的地址,由取地址运算符取出。赋给p2的则是p1的指针,p2和p1将都指向变量iVal。p3则是先初始化为空指针,再用new申请存储单元,然后再赋值。通过间接访问,将100保存到p3中。 注意:赋地址时,不要求左值原来必须指向某个内存单元。而赋数据则要求指针必须指向某个内存单元,给其赋值只是填充了该内存单元的内容
阅读(1173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~