admin 管理员组

文章数量: 1086019


2024年4月22日发(作者:association的派生词)

第12卷第3期 

黄冈职业技术学院学报 

Vn1.12 No.3 

2010年6月 

Journal of Huanggang Polytechnic 

Jun.2010 

C++语言中指针变量与数组的关系剖析 

黄国军 

(黄冈职业技术学院计算机科学与技术系,湖北黄冈438002) 

摘要:C++语言中的指针变量和数组的关系非常密切。掌握指针变量与数组的关系是学好c++ 

语言课程的难点,也是重点。就不同级别的指针变量与不同维数的数组之间的关系进行剖析,以便明确教 

学重难点。 

关键词:指针变量;地址;数组 

中图分类号:TP314 文献标识码:A 文章编号:1672—1047(2010)03—0009—02 

DOI:10.3969/j.issn.1672—1047.2010.03.03 

1引言 

是一级指针常量,它始终代表数组a中首元素的地 

址,其值不能改变。当通过语句pa:a或pa=&a 

运用指针编程是C++语言最主要的风格之 

[0]让指针变量pa与一维数组a建立了如图1所 

指针极大丰富了C++语言的功能。指针就是 

示关系。 

地址,指针变量是专门存放地址的变量;一个数组 

的数组名表示该数组在内存中存放的地址,地址就 

是指针,故数组名也是指针;在c++语言中能进行 

地址操作的除了指针变量外还有数组名。指针从 

图1一级指针变量pa与一维数组a 

级别上来讲常用的有一级指针、二级指针。一级指 

对数组a中第i(0≤i≤4)个元素的访问有四 

针每次加1表示下移一个基类型的字节数(列移 

种形式a[i]、pa[i]、*(a+i)和*(pa+i)。它们之 

动);二级指针每次加1表示下移一组基类型的字 

间是等价关系,可以相互替换。P是一个指针变 

节数(行移动)。从性质来讲有常量指针与变量指 

量,它可以通过与自增运算符++或自减运算符 

针。常量指针就是数组名,它的值是不能改变的, 

——

相结合来访问所指数组中的每一个元素;而a 

不能放在赋值符号的左边。变量指针的值是允许 

是一个指针常量,故不能。对数组a中第i个元素 

被改变的,可以根据需要在程序的不同位置赋不同 

的地址的表示有a+i与P+i两种表示形式。由于 

的值。为方便后面的讲述,现假设有如下定义语句: 

指针变量pa与数组名a都是一级指针,只要pa始 

int pa; 

终指向数组a的首元素,它们的关系是等价的,在 

m‘t a[5]; 

出现数组名a的地方都可以用pa替换。 

in£* pb: 

3一级指针变量与二维数组 

m‘t b[3][4]; 

int*pc[3]; 

级指针变量pa可以访问二维数组b。二维 

int(*pd)[4]; 

数组b中的元素在内存中是按行存放的,它首先按 

从级别上来分,一级指针有pa和a;二级指针 

从左到右的顺序在内存中存放第一行的元素后,再 

有pb、pc、pd和b。从性质来分常量指针有a、b、pc; 

按从左到右的顺序存放第二行元素,如图所示:b 

变量指针有pa、pb、pd。下面分别就它们问的关系 

[0][O]的下一个元素是b[O][1],hi0][3]的下个元 

进行讨论。 

素是b[1][O]。当通过语句pa=b或pa=&b[O] 

2一级指针变量与~维数组 

[O]让一级指针变量pa指向二维数组b的首元素 

后,它们的关系如图2所示。 

pa是一级指针变量,它的值可以被改变;而a 

对二维数组b中第i(0≤i≤2)行j(0≤j≤3)列 

收稿日期:0210—4—20 

作者简介:黄国军(1972一),男。硕士。讲师。h ̄cpp@hgtm.edu.an 

9・ 

第3期 C++语言中指针变量与数组的关系剖析 第12卷 

元素的访问有b[i][j]、pa[i*4+j]、*(*(b+i)+ 

j)和*(pa+i*4+j)四种形式。在通过键盘给数 

组b中的逐个元素格式化赋值时,访问的是它们的 

地址;对数组b中第i(O≤i≤2)行j(0≤j≤3)列元 

素的地址的表示有*(b+i)+i、b[i]+i、P+i*4+ 

j三种表示形式。由于pa是一级指针而b是二级 

指针,一个是按列移动,另一个按行移动,它们是不 

等价的,这就决定了在数组名b出现的地方如果用 

中的列宽为4。可以通过语句pa=b或pd=&b[0] 

[0]让一维数组的指针变量pd与二维数组b建立 

指向关系。对二维数组b中第i(0≤i≤2)行i(O≤i 

≤3)列元素的访问有Ob[i]Ej]②pd[i][j]③*(* 

(b+i)+j)④*(*(pd+i)+

j))四种形式。在通 

过键盘给数组b中的逐个元素格式化赋值时,访问 

的是它们的地址;对数组b中第i(o≤i≤2)行j(0 

≤j≤3)列元素的地址的表示有*(b+i)+j、b[i] 

pa来替换必须进行一定的处理。 +j、*(pd+i)+j、pd[i]+j三种表示形式。pd和 

laa b[o】∞】 b 】【1】 b 】[2】 b 】p】 

b都是二级指针,都是按列移动,它们是等价的,如 

果pd始终指向数组b的首首行,则在数组名b出 

白[1 】 b[i111] b[1】【2】 b[UP] 

现的地方都能用用pd替换,它们是等价的。 

t ̄21[0】 b口】【l】 b[2】[2】 b[2]p】 

5结束语 

图2一级指针变量pa与二维数组b 

通过上述对指针变量与数组关系的分析,其结 

4二级指针变量与二维数组 

果可以归纳如下:当一级指针变量指向一维数组首 

元素后,只要不改变指针变量的值,所有要一维数 

C++语言中,二级指针变量与二维数组名都 

组名出现的地方都能用指针变量名替换,它们间是 

是二级指针。它们之间能否建立关系的首要条件要 

等价的。当一级指针变量指向二维数组的首元素 

看二级指针变量能否确定它所指向二维数组的列 

后,由于级别的不同(一个列移动,一个是行移动), 

宽,次要条件是二级指针变量所指的一维数组的元 

这就决定了在数组名出现的地方如果用一维指针 

素个数与二维数组的列宽是否相等,两者缺一不可。 

来替换必须进行一定的处理,它们间是不等价的。 

二级指针变量有指向指针的指针变量pb和指 二级指针变量与二维数组名都是二级指针。它们 

向一维数组的指针变量pd。二级指针变量pb一般 

之间能否建立关系的首要条件要看二级指针变量 

存放另一个一级指针变量的地址。因为二级指针 

能否确定它所指向二维数组的列宽,次要条件是二 

变量pb不能确定它所指向的二维数组的列宽,所 

级指针变量所指的一维数组的元素个数与二维数 

以它不能与一个二维数组建立指向关系。 

组的列宽是否相等,两者缺一不可。 

p c| b∞】[0】 b 】【1】 b 】【2】 bf0】 】 

b 】[0】 b 】【l】 b州馥】 b[O]p】 

参考文献: 

b [0】 b 了£l】 b 】 】 b[0]p】 

[1]崔武予.c++语言程序设计[M].北京:清 

图3指向一维数组的指针变量pd与二维数组b 

华大学出版社,2008—02. 

从上面的定义可以看出指向一维数组的指针 

[2]向华.c++语言程序设计[M].北京:清华 

变量pd所指一维数组含有4个元素,二维数组b 

大学出版社,2008—06. 

Analysis Oil RdafiomMp between Pointer Variables and Arrays in C++Language 

HUGNG Guo—jun 

(Huanggang Polytechnic College,Huanggang 438002 Hubei) 

Abstract:The relationship between the pointer variable and array is very closely related in C++language.It is 

the dificult point to master the relationship ebtween hte variables and arrays for leaming C++language well,which is 

also key point.In order to clarify the importance and dififculties in teaching,the author analyzed the relationship eb— 

tween hte pointer varibales of diferent levels and diferent dimensions of the arrays. 

Key words:Pointer varibales;Address;Array 

[责任编校:郭杏芳] 

lO・ 


本文标签: 指针 数组 变量 关系 指向