- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级语言程序设计 授课教师: 电话: 邮箱: 授课班级:电子商务2009级 第6章 指针与字符串 6.1 指针的概念 6.2 指针型变量 6.3 指针与数组 6.4 指针与函数 6.5 指针与类、对象 6.7 动态内存分配与new和delete运算符 6.8 string类 第6章 指针与字符串 C++语言拥有在运行时获得变量地址和操纵地址的能力,这种可用来操纵地址的变量类型就是指针。指针可以用于数组、内存的访问,还可作为函数的参数 6.1 指针的概念 指针是变量,是用来专门存放内存地址的变量。 为了说清楚指针变量,先讨论对变量的访问(存取)方式。 按变量的地址直接存取变量的方法称为“直接访问”方式。存贮变量的内存空间的首地址称为该变量的地址。 如果将一个变量的地址放在另一个变量中,则存放地址的变量称为指针(pointer)型变量。这样存取变量,也可以间接的由指针变量取得该变量的地址进行,称为“间接访问”方式。 由于指针变量中的值是另一个变量的地址,我们习惯上形象地称指针变量指向该变量。指针变量中的值也简称为指针,所以指针就是地址。 设a是整型变量,其值为5,其分配的内存地址为1000H(H是16进制后缀,汇编语言表示方式);又设pa是整型指针变量,其值为1000H,可以说指针pa指向变量a。 6.2 指针型变量 2. 指针的赋值 2. 指针的赋值 3. 指针的运算 与指针有关的基本运算符有以下两个。 (1)变量名。“”为取地址运算符,用来获取变量的首地址。 (2)*指针变量名。“*”为指向运算符,用来获取指针变量所指向变量的值。 “和“*”运算符都是单目运算符,其优先级高于所有双目运算符,采用从右到左的结合性。 6.3 指针与数组 6.3.1 指针与数组的关系 数组是由同一类型元素组成的一个有序集合,如: int a[5]={5,8,13,21,34}; 该数组在系统编译时分配连续的存储空间,数组名a就是这连续空间的首地址,因此可以将数组名当作地址值(指针)看待。即 数组名是常量,是一个指针值。 如再定义:int *p; 则下述有关指针的运算是合法的: p=a;p++;--p;p+=3;p=a+2; 下述有关指针的运算是非法的: a++;--a;a+=3;a=p+2; 原因在于p是变量,a是常量! 【例6-3】用指针的方法编写求一个数组中所有元素之和的程序。 2. 二维数组元素的指针表示 【补充例3】阅读程序,注意数组元素的表示方法 #includeiostream.h int a[2][3]={{1,3,5},{7,9,11}}; void main() { couta,*a,**aendl; couta[0],a[0],*(a+0)endl; couta[1],a+1,*(a+1)endl; couta[1],**(a+1),*(a+1)[0]endl; couta[1][1],*(*(a+1)+1),*(a[1]+1)endl; } 指针可以指向数组元素,也可以指向数组。 1.指向数组元素的指针 指向数组元素的指针是一级指针,如定义数组、指针: int a[10],b[3][5];int *p1,*p2,*p3; 则下述赋值是正确的: p1=a[5];p2=b[0][0];p3=b[2][4]; 赋值:p1=a;也是正确的; 而赋值p2=b;是错误的,因为b是二维数组名,相当于二级指针,而p2是一级指针,因此是错误的。 【补充例4】阅读程序 【例6-5】用指针的方法将二维数组的转置(行列互换)形式输出,并输出相应的指针值,进行观察、比较。 #includeiostream.h void main() { int aMatrix[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int i,j,*p; cout转置前的矩阵:endl; for(i=0;i3;i++) { p=aMatrix[i]; //p存放各行的起始地址 for(j=0;j4;j++) cout*(p+j); coutendl; } cout转置后的矩阵:endl; for(j=0;j4;j++) { for(i=0;i3;i++) { p=aMa
文档评论(0)