欢迎来到天天文库
浏览记录
ID:50328215
大小:292.50 KB
页数:42页
时间:2020-03-08
《标准C++程序设计 教学课件 作者 牛连强 第4章 指针 引用与数组.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第4章指针、引用与数组关于内存地址内存空间的访问方式通过变量名访问通过地址访问指针是内存地址与存储数据的类型相结合的产物。利用指针可以使程序绕过普通变量名读取或修改内存中存储的值。有利于增强语言的能力和提高程序的效率但使用错误的地址也会导致不可预测的后果4.1指针4.1.1指针的概念1变量的地址例如:定义变量intx(10);假定程序运行时为x分配的内存空间的首地址(第一个字节的地址)是0x12ff88,则可以认为0x12ff88是一个指向x的指针。&称为取地址运算符,表达式&x就是x的地址,或者说指向变量x的指针。通常,程序中只使用&x来表示x的地址,
2、并不需要知道&x的实际值是多少。首先,在程序的两次运行时,分配给x的地址可能并不一致。其次,表达式&x中除了数值0x12ff88之外,还含有此地址所指向的内存中所保存数据的类型信息。4.1.1指针的概念(续)2指针变量指针并不是整数。因此,需要使用一种专门的变量——指针变量来存储指针。一般定义形式如下:type*变量名[=地址表达式];例如:char*pc;int*pd;指针变量的定义清楚地说明了指针的数据类型。4.1.1指针的概念(续)指针反映出两方面的含义其一是指针的值,即指针指向内存的位置。其二是利用该指针可以从内存中取出一个什么样的数据,指针类型
3、“type*”中的type恰好说明了这种数据的类型。由于type决定了通过指针取得的数据类型是否正确,通常称其为指针的“基类型”。4.1.1指针的概念(续)例如,对于如下变量:intx(10);doubley(2.3);利用指针变量可以保存指针的值,如图:intx=10,*px=&x;doubley=2.3,*py=&y;连续定义指针变量时每个名字之前都要加上*号,如:char*p1,*p2;//如果p2前无*号是字符型变量4.1.1指针的概念(续)注意:指针间的赋值应严格保证其类型相同。&x与px、&y与py的差别只在于前者是常量,而后者是变量。102
4、.3常量&x变量px常量&y变量py指针中“包装”了2种信息intxdoubley0x12ff88int0x12ff84double4.1.2指针运算1间接访问运算符*运算符“*”称为“间接访问”运算符。“*指针”形式的“新的变量”,此变量对应着指针所指向的存储单元。若一个指针p的类型为“type*”,则*p是一个type类型的变量,可以作为左值。charx,*px=&x;//&x和px都是指向x的指针inty,*py=&y;//&y和py都是指向y的指针*(&x)和*px是char类型的变量,完全等同于变量x,*(&y)和*py是int类型的变量,与变
5、量y完全相同。4.1.2指针运算(续)&与*是一对具有“相反意义”的运算符&x是指向变量x的指针*(&x)是变量x本身&(*(&x))又是指向变量x的指针间接访问运算符也可以用[]代替*px与px[0]具有完全相同的作用。4.1.2指针运算(续)2指针类型的强制转换如果要将一个类型不匹配的指针保存在指针变量中,需要经过类型转换。例如:doublex=2.3;int*p;由于p与&x类型不同,不能直接将&x保存在变量p中,但可以先进行类型转换:p=(int*)&x;经过转换并赋值后,p得到了正确的地址,即p指向变量x。但是,根据p的定义,*p是一个int类
6、型的变量,与x并不等同。要想通过p表示x仍需要将类型转换回来,即*((double*)p)才是与x完全相同的变量。4.1.2指针运算(续)3指针的算术运算指针可以进行加减算术运算。运算的结果受指针基类型的支配。如果一个指针p的类型是“type*”,那么,p的加减运算都以sizeof(type)为单位进行。例:intx;cout<7、两个指针的减法(结果是整数)。intx,y,z;int*p=&z;cout<8、可以使用关系运算符比较两个指针的大小,但通常是在两个指针指向同一目标(如一个数组
7、两个指针的减法(结果是整数)。intx,y,z;int*p=&z;cout<8、可以使用关系运算符比较两个指针的大小,但通常是在两个指针指向同一目标(如一个数组
8、可以使用关系运算符比较两个指针的大小,但通常是在两个指针指向同一目标(如一个数组
此文档下载收益归作者所有