第六章指针引用和动态空间管理.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章指针引用和动态空间管理

第六章 指针、引用和动态空间管理 6.1指针的概念和指针变量的定义 指针是一种十分重要的构造数据类型,C++程序中常常使用指针,使用指针的好处是:更适合表达某些算法,使用指针可以写出更为紧凑和有效的程序。要学好C++必须学好指针。 6.1.1指针的概念 指针是一种数据类型。指针-就是指针类型变量,即指针变量。指针变量常常直接简称指针。 与一般变量的不同点:它存放的不是数据的值,而是另一个变量的地址。 就是说指针变量:用来存放另一变量的内存地址的变量。 每个变量和函数声明后,编译器就会为它们在内存中开辟一块存储区域,这块区域的地址就是变量的地址。 这块区域中存放的数据值(内容)就是变量的值。对变量的访问(引用),实质就是对变量存储空间的内容(数据值)进行访问。 这样我可以用另一种方法来访问变量内容,即不通过变量名,而是通过变量在内存中的地址进行访问。这种访问方式就是指针访问。 6.1.2 指针的定义和初始化 同一般变量一样,先定义后使用。定义时要指明指针的类型,并在指针名前加修饰符*。 格式: 类型修饰符 *指针名 或者 类型修饰符* 指针名 *只是类型修饰符、不是变量名的一部分。 如语句:int * x_ptr; 或 int * x_ptr; 定义了一个指向int型变量的指针(变量)x_ptr。 而 char * x_ptr; 或 char * x_ptr; 定义了一个指向char型变量的指针(变量)x_ptr。 注意:语句int* x,y; 不是定义了两个int型指针,而是定义了一个int型指针和一个int型变量。 int *x,*y; 指针定义后,并不具体地指向某个变量,而只是确定了类型。可以对指针进行初始化,让它指向某个具体的变量。 这通常用到运算符’’’’。它是取地址运算符。用在操作数的前面,表示取操作数的内存地址。操作数可以:一般的变量、数组元素、结构成员等。 如:float salary;float *salary_ptr=salary; // 将指针salary_ptr初始化为变量salary的内存地址值,也即指向了具体的salary。 6.1.3 常值指针 可以用const把一个指针定义为常值指针。 常值有两种含义:一种是指针所指向的数据为常值,这时须将const放在*号的前面。 如 const char *s=“Hello!”; // char const *s=“Hello!”;// char const *s;s=“Hello!” // s是一个指针变量,它指向一个字符串常量。不能用该指针来改变其所指向的内容,指针s本身可以改变的。 如 s=“Hi” //正确, *s=‘Y’ //错 另一种:指针本身是常值,须将const 放在*的后面。 如: char * const s=”Hello!”; // s是一个指针常量,它指向一个字符串变量。指针的内容可变,指针本身不可变。对于指针常量,必须在定义时对其初始化。与前相反。 如 s=“Hi”// 错,*s=‘Y’//正确 也可以是上述两者的综合。两者都不能改变。 6.2指针的基本操作 6.2.1指针赋值:操作符= 指针定义时可以对它进行初始化。 如:float salary;float *salary_ptr=salary; 也可以声明指针变量后赋值: 如:int a=-8978;int *p; p=a //p被赋值为变量a的地址。 同类型指针可以互相赋值。 如:double a;double *x=a, *y;y=x//x, y 指向同一个变量a。 int count=78, *c_ptr=count; c_ptr=x; //错,不同类型指针 特殊指针-空指针。 值为零的指针C++函数库中都将空指针定义为名字NULL。因此将指针赋值为NULL即赋值为零。 如:x=NULL;即为;x=0 用修饰符void修饰的指针变量,为void 指针。任何类型的指针可赋给void指针,但反过来不行。 6.2.2 取值的地址:操作符 float salary;float *salary_ptr=salary;// salary_ptr指向salary。 6.2.3 间接访问(取内容运算符)操作符* 用在指针变量的前面,表示取指针所指向的存储单元的值,也即取指针所指变量的值。 如:int a=90;int a_ptr=a;int x; x=*a_ptr; //把a_ptr所指的存储区域的内容,即变量a的值赋给x,x等于90。而 *a_ptr=98; //将98填入a_ptr所指的存储区域,即a的值被填为98。同理 *a_ptr=*a_ptr+1;//a_ptr所指的存储区域的值加1,即a的值被加了1,与a=a+1效果一样。 注意:声明语句中和赋值中*

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档