第2章 指针与引用

第2章 指针与引用

ID:20599667

大小:63.50 KB

页数:7页

时间:2018-10-14

第2章 指针与引用_第1页
第2章 指针与引用_第2页
第2章 指针与引用_第3页
第2章 指针与引用_第4页
第2章 指针与引用_第5页
资源描述:

《第2章 指针与引用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第二章指针和引用在C/C++入门教材中,指针和引用一般放在稍后篇幅。本课放在前面,因为指针和引用与C/C++一些较高级的问题关系密切。一、指针的概念和声明1指针是一种数据类型指针是一种数据类型,指针所存放的是某个变量(或常量)的地址,指针可以指向任何类型的变量(或常量)--通常把这称为指针的类型,但指针本身永远是unsignedlongint类型的。比如:int*p1;float*p2;char*p3,分别指向不同的类型,但指针本身是unsignedlongint类型的,其具体的长度应等于CPU寻址能

2、力。2指针的声明指针的用法很多,可以指向常量、变量、数组、函数、对象……。指针的声明有一条不成文的规则:定义一个指针"*"最好靠近要定义的标识符旁边。如char*p;//这说明p是指向字符类型的指针,但char*p;//也是可以的,但没有上一种定义这么直观,但在读别人的代码时,常有这种写法。常常不容易看懂别人写的指针声明,有人提出“从右到左”解释指针声明的办法,指针“*”读做“指向”,试一试:int*p1;//p1指向整型变量。int*p1;//与上面写法等效float*p1;//p1指向浮点型变量。

3、float*p1;//与上面写法等效插入小问题:const inta=1和intconsta=1有区别吗? 下面几个有关const和指针声明的问题是就业考试常见的:constint*a;//a指向整型,该整型是常量//指针a不是常量,a指向的是整型常量constint*a;//同上intconst*a;//同上。intconst和constint的const都修饰intint*consta;//a是常量,指向整型//换句话说,a是指针常量。const*inta;//???constint*consta

4、//a是常量..指向整型..常量//换句话说,指针a和它所指的都是常量。上面几个有关const的问题虽有特殊性,但也符合“从右到左”解释指针声明的原则的。int*p[4]//数组p是(元素是)…指向整型的指针。//这是指针数组int*p[4]//同上int(*p)[4]//(先从右到左读括号内的)P指向,//(先从右到左读括号外的)指向数组,数组元素类型为int,//这是指向数组(首元素)的指针int**p//指向另一个指针..(另一个指针)指向一个整型int*(*)p//同上。注意*运算符结合性是“

5、从右到左”的。int(*)*p//???int(*p)()//p是指针,指向一个返回类型为int的函数入口地址//这是指向函数的指针int*a()//函数a返回指针,该指针是int型的//这是返回类型为指针的函数int*a()//同上int*a(int,int)//同上二、指针的赋值和运算1基本问题inta=10;int*p;p=&a;//这是最常见的形式上机习题1:inta;int*p;p=&a;a已定义但无初值会怎么样?为什么?//下面的代码结果是什么?注意*&算符是右结合的inta=10;int

6、*p;p=&a;p=&*p;//p是a的地址,*p就是a*p=20;//更改了a上机习题2:数组的本质是指针,[]实际上是变址算符,用指针进行++或--运算遍历数组比用下标遍历数组效率高,试分别定义int,shortint,char,float类型的数组,用++或--算符遍历数组.每次++或--,显示数组元素,并显示指针移动了几个字节?上机习题3:分别定义int,shortint,char,folat等类型的指针P,求出指针P占用的字节数和指向的变量地址。每次启动该程序,在变量不变的前提下,P指向的地

7、址是否都有变化?结合“操作系统”课程关于内存管理的学习,分析C/C++的指针,在程序员不强加干预时,指向的是绝对地址还是进程的相对地址?如程序员强加干预(比如令p=1000),指向的是绝对地址还是进程的相对地址?上机习题4:有人说“字符串的本质是char数组”,试设计一个小程序验证之。2指向函数的指针int(*p)();//p是指向函数的指针,p指向函数的入口地址。//假如有一个函数intmax(….),和变量intc则p=max;//将max的入口地址给p。不能写为p=max(),因为max()返回

8、类型不是pc=(*p)(…);//调用max,可“自右向左”读为:将p指向的..函数..赋值给c。//(*p)就是max();而p=max只表明将p指向max的入口地址。c=*p(…);//这样写变成什么了?“自右向左”读为:调用函数p(..),将返回值所指向的???//赋值给c。很显然是错的,因为要调用的是max(),而不是不存在的p函数。指向函数的指针有什么用处?一般的教学举例中,单指向一两个函数没什么用处。但在实际编程中,可以用一个指针来灵活地代表

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。