欢迎来到天天文库
浏览记录
ID:24817983
大小:507.50 KB
页数:100页
时间:2018-11-13
《谭浩强《c++程序设计》课件 第6章》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第6章指针6.1指针的概念6.2变量与指针6.3数组与指针6.4字符串与指针6.5函数与指针6.6返回指针值的函数6.7指针数组和指向指针的指针6.8有关指针的数据类型和指针运算的小结*6.9引用为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量类型,分配一定长度的空间。例如,C++编译系统一般为整型变量分配4个字节,为单精度浮点型变量分配4个字节,为字符型变量分配1个字节。内存区的每一个字节有一个编
2、号,这图6.1就是“地址”。6.1指针的概念图6.1请务必弄清楚一个内存单元的地址与内存单元的内容这两个概念的区别。在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。这种按变量地址存取变量值的方式称为直接存取方式,或直接访问方式。还可以采用另一种称为间接存取(间接访问)的方式。可以在程序中定义这样一种特殊的变量,它是专门用来存放地址的。图6.2是直接访问和间接访问的示意图。为了将数值3送到变量中,可以有两种方法:(1)直接将
3、数3送到整型变量i所标识的单元中。见图6.2(a)。(2)将3送到指针变量i_pointer所指向的单元(这就是变量i所标识的单元)中。见图6.2(b)。图6.2所谓指向,就是通过地址来体现的。由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元。因此将地址形象化地称为“指针”。一个变量的地址称为该变量的指针。如果有一个变量是专门用来存放另一变量地址(即指针)的,则它称为指针变量。指针变量的值(即指针变量中存放的值)是地址(即指针)。指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处
4、是:用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用“*”符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,见图6.3。下面两个语句作用相同:①i=3;②*i_pointer=3;图6.36.2变量与指针C++规定所有变量在使用前必须先定义,即指定其类型。在编译时按变量类型分配存储空间。对指针变量必须将它定义为指针类型。先看一个具体例子:inti,j;//定义整型变量i,jint*pointer_1,*pointer_
5、2;//定义指针变量*pointer_1,*pointer_2第2行开头的int是指:所定义的指针变量是指向整型数据的指针变量。也就是说,指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j),而不能指向浮点型变量a和b。这个int就是指针变量的基类型。指针变量的基类型用来指定该指针变量可以指向的变量的类型。定义指针变量的一般形式为6.2.1定义指针变量基类型*指针变量名;下面都是合法的定义:float*pointer_3;//pointer_3是指向单精度型数据的指针变量char*
6、pointer_4;//pointer_4是指向字符型数据的指针变量请注意:指针变量名是pointer_3和pointer_4,而不是*pointer_3和*pointer_4,即“*”不是指针变量名的一部分,在定义变量时在变量名前加一个“*”表示该变量是指针变量。那么,怎样使一个指针变量指向另一个变量呢?只需要把被指向的变量的地址赋给指针变量即可。例如:pointer_1=&i;//将变量i的地址存放到指针变量pointer_1中pointer_2=&j;//将变量j的地址存放到指针变量pointer_2中
7、这样,pointer_1就指向了变量i,pointer_2就指向了变量j。见图6.4。图6.4一般的C++编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址。在定义指针变量时要注意:(1)不能用一个整数给一个指针变量赋初值。(2)在定义指针变量时必须指定基类型。有两个与指针变量有关的运算符:(1)&取地址运算符。(2)*指针运算符(或称间接访问运算符)。例如:&a为变量a的地址,*p为指针变量p所指向的存储单元。6.2.2引用指针变量例6.1通过指针变量访问整型变量。#include8、ream>usingnamespacestd;intmain(){inta,b;//定义整型变量a,bint*pointer_1,*pointer_2;//定义指针变量*pointer_1,*pointer_2a=100;b=10;//对a,b赋值pointer_1=&a;//把变量a的地址赋给pointer_1pointer_2=&b;//把变量a的地址赋给pointer_2cout<
8、ream>usingnamespacestd;intmain(){inta,b;//定义整型变量a,bint*pointer_1,*pointer_2;//定义指针变量*pointer_1,*pointer_2a=100;b=10;//对a,b赋值pointer_1=&a;//把变量a的地址赋给pointer_1pointer_2=&b;//把变量a的地址赋给pointer_2cout<
此文档下载收益归作者所有