- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)