- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章程序设计初步第4章函数与预处理第5章数组第6章指针
图6.23 怎样定义一个指向指针数据的指针变量呢?如下: char *(*p); 从附录B可以知道,*运算符的结合性是从右到左,因此“char *(*p);”可写成 char **p; 例6.16 指向字符型数据的指针变量。 #include iostream using namespace std; int main( ) { char **p; //定义指向字符指针数据的指针变量p char *name[]={″BASIC″,″FORTRAN″,″C++″,″Pascal″,″COBOL″}; p=name+2; //见图6.23中p的指向 cout*pendl; //输出name[2]指向的字符串 cout**pendl; //输出name[2]指向的字符串中的第一个字符 } 运行结果为 C++ C 指针数组的元素也可以不指向字符串,而指向整型数据或单精度型数据等。 在本章开头已经提到了“间接访问”一个变量的方式。利用指针变量访问另一个变量就是“间接访问”。如果在一个指针变量中存放一个目标变量的地址,这就是“单级间址”,见图6.24(a)。指向指针的指针用的是“二级间址”方法。见图6.24(b)。从理论上说,间址方法可以延伸到更多的级,见图6.24(c)。但实际上在程序中很少有超过二级间址的。 图6.24 表6.1 有关指针的数据类型 6.8 有关指针的数据类型和指针运算的小结 6.8.1 有关指针的数据类型的小结 定义 含义 int i; 定义整型变量 int *p; p为指向整型数据的指针变量 int a[n]; 定义整型数组a,它有n个元素 int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成 int (*p)[n]; p为指向含n个元素的一维数组的指针变量 int f( ); f为带回整型函数值的函数 int *p( ); p为带回一个指针的函数,该指针指向整型数据 int (*p)( ); p为指向函数的指针,该函数返回一个整型值 int **p; p是一个指向指针的指针变量,它指向一个指向整型数据的指针变量 前面已用过一些指针运算(如p++,p+i等),现在把全部的指针运算列出如下。 (1) 指针变量加/减 一个整数 例如: p++,p--,p+i,p-i,p+-i,p-=i等。 C++规定,一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。如p+i代表这样的地址计算: p+i*d,d为p所指向的变量单元所占用的字节数。这样才能保证p+i指向p下面的第i个元素。 (2) 指针变量赋值 将一个变量地址赋给一个指针变量。如 6.8.2 指针运算小结 p=a; //将变量a的地址赋给p p=array; //将数组array首元素的地址赋给p p=array[i]; //将数组array第i个元素的地址赋给p p=max; //max为已定义的函数,将max的入口地址赋给p p1=p2; //p1和p2都是同类型的指针变量,将p2的值赋给p1 (3) 指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示: p=NULL; 实际上NULL代表整数0,也就是使p指向地址为0的单元。这样可以使指针不指向任何有效的单元。实际上系统已先定义了 NULL: #define NULL 0 在iostream头文件中就包括了以上的NULL定义,NULL是一个符号常量。应注意,p的值等于NULL和p未被赋值是两个不同的概念。 任何指针变量或地址都可以与NULL作相等或不相等的比较,如 if(p==NULL) p=p1; (4) 两个指针变量可以相减 如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数,见图6.25。 假如p1指向a[1],p2指向a[4],则p2-p1=(a+4)-(a+1)=4-1=3。 但p1+p2并无实际意义。 实际上在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。 实参与形参的结合,有以下4种形式: 实 参 形 参 数组名 数组名 (如例5.7) 数组名 指针变量 (如例6.6) 指针变量 数组名 指针变量 指
文档评论(0)