王朝百科
分享
 
 
 

多级指针

王朝百科·作者佚名  2010-07-26  
宽屏版  字体: |||超大  

一、多级指针的定义和变量定义当指针变量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++, pa[i]++)

cout << "a[" << i << "][" << j << "]=" << *pa[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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有