词条 | 多级指针 |
释义 | 一、多级指针的定义和变量定义当指针变量pp所指的变量Ip也是一种指针时,pp是一种指向指针的指针,称指针变量pp是一种多级指针。(以常用的二级指针为例) 二级指针类型实际上是(一级)指针变量的地址。 设有基类型为int的指针变量p定义如下: int *p,n; 变量p的类型为int*,指针变量p可存贮一个int类型变量(例如n)的地址: p=&n; /* n的地址存贮到指针p中,即,使p指向n */ 记p的类型(int*)为T,即,p是T类型的变量。 可使用基本运算(&) &p 来计算指针变量p的地址。上面基本运算的结果是T* 类型的,即,是 T* ≡ (int*)* ≡ int** 类型的,即是基类型为int的指针变量的地址,是基类型为int的二级指针。 若要把上面的计算结果存贮到一个变量中,我们需要定义一个T*类型的 指针变量,例如q: T *q; ≡ (int*)*q; ≡ int **q; 变量q被称为基类型为int的二级指针变量。 下面的处理使q指向p: q=&p; 下图描述了int类型变量n、基类型为int的一级指针p、基类型为int的 二级指针q之间的关系:一般地,K级指针变量的地址是K+1级指针类型的。实用上,二级指针的使用 最为广泛,三级以上的指针很少使用。 二、多级指针的应用(1) 使二级指针指向指针数组的元素,并通过二级指针指出指针数组中的元素。 设p是一个基类型为T的指针数组,q是一个基类型为T的二级指针 T *p[N],**q; (N是一个正整数常量) 语句 for(q=p,k=0;k<N;++k,++q) { /* *q按顺序方式指出指针数组p中一个元素(基类型为T的指针)*/ } (2)通过二级指针类型的参数,向外传递一个指针类型的结果。 当函数通过参数向外传递一个T类型的计算结果时,该参数的类型应为 T*的。当类型T是某种指针类型时,该参数的类型则应是二级指针类型的。 (3)向函数传递一个列数固定的二维数组。 三、学习要点理解多级指针的概念,掌握多级指针变量定义的方法。 理解并能使用多级指针数组进行数据处理。 四、参考例子如果指针变量中保存的是另一个指针变量的地址,这样的指针变量称多级指针。如果对一级指; 针熟练掌握其基本原理,分析多级指针变量所表示的含义也就不困难了。例如: #include <iostream.h> void main() { int a= 5; int *b=&a; int ** c = &b; cout<< **c << endl; **c =10; cout <<"a=" <<"**c=" <<**c; } 程序中c称为多级指针(二级指针),在这个语句执行完之后,a,b,c之间的关系是: 变量c -------------> 变量b -------------> 变量a 或表示为 “ c---->*---->*--->int 即c是一个指针,该指针指向一个指向int类型变量的指针变量。 分析* c和**c的类型: c----->*----->*------> int * c----> * ----> int **c----->int 表达式**c引用到一个基本数据类型的变量,这是程序员想细致了解的变量,而象c和*c的值, 因为它们是指针,程序员所关心的只是使用指针运算建立和修改它们之间的联系(指向……)。 在上面给出的程序中,语句 **c=10; pa---> [2] ----> * --->int 即pa是有两个元素的数组,每个元素是个指向int类型的指针。而pc为 : pc---> [5] ----> [7] ---> * ---> char 例: #include <iostream.h> void main() { int a[2][3]={2,4,6,8,10,12}; int *p[2]; p[0]=a[0]; p[1]=a[1]; for(int i=0:i<2;i++) for (int j=0;j<3; j++, p[i]++) cout << "a[" << i << "][" << j << "]=" << *p[i] <<endl;} 运行结果: a[0][0]=2 a[0][1]=4 a[0][2]=6 a[1][0]=8 a[1][1]=10 a[0][2]=12 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。