admin 管理员组文章数量: 1086019
2024年3月14日发(作者:c型钢网站)
浅析C++中的指针和数组
王晓燕
(淮阴工学院计算机工程学院,淮安223001)
摘要:指针和数组是C++语言学习中的难点,指针概念较难理解且容易错误使用,数组和指针紧
密相关.数组元素可通过指针引用。能够使用数组方法解决的问题一般也可以使用指针方
法。分别对指针、数组元素引用、数组指针等知识点做分析归纳,并通过实例进行说明。
关键词:指针:数组:C++
O 引言
1.2指针常用运算
指针变量可参与的运算主要有:自增、自减、加、减
一
C++语言是当今最流行的高级程序设计语言之一.
应用十分广泛。它也是一门十分复杂的语言.里面知识
个整数,关系和赋值。其他运算,例如乘法、除法、浮
点繁多。指针与数组是其中的难点.很多学生在学习时
非常困难.而且往往处于一知半解 笔者将结合自己的
教学体会对这部分内容做些分析和归纳.帮助学生更
好地掌握指针和数组
点运算、指针之间的加法等,并无意义,所以也不支持,
而且这些运算通常是和数组结合起来用 除去赋值运
算外,其他运算的前提是指针指向数组中某个元素 看
下面例子:
int p, q,a[1 0]; ①分别声明指针P,q和数组a
1 指针与指针变量
1.1指针概念
指针是一种数据类型.专门存放地址数据的变量
称为指针变量。例如:int p;表示定义了一个指针变
量P,简称指针P。P是变量,int*是类型。指针变量在定
义后要给它赋值,使其有固定的指向。例如:int i;P=
&i:表示指针变量P中存放变量i的地址.或者认为指
针P指向变量i。此时若想引用变量i可使用指针的形
式,即: p。
P=a;
q=p+3;
p++;
if(p<q)q=&a【9】;
②p指向a【0]
③q指向a【3】
Dp指向a[1]
⑤p<q成立,q重新赋值,指向a【9】
cout<<q—p<<endl; ⑥打印结果为8
1.3指针常见的错误应用.
根据指针变量的特性.下面几个例子是常出现的
错误应用
(1)使用未初始化的指针,例如:
int p; p=100;
指针变量与其他类型变量相比有如下共性:
(1)在内存中占据一定大小的存储单元:
(2)先定义.后使用。
但它也有自己的特殊性,主要体现在:
(2)执行无效的指针比较,例如:
int p1. p2;
int al[1 oJ,a2[1O];
pl=al;
p2=a2;
(1)它的内容只能是地址,而不能是数据;
(2)必须初始化后才能使用,否则指向不确定的存
储单元:
if(p1 02)…
(3)指针变量修改后没有重新初始化.例如:
char P,str[】=”this is a test”;
(3)只能指向同一基类型的变量
收稿日期:2010—08—09 修稿日期:2010—09—09
作者简介:王晓燕(198 ̄-),女,山东莘县人,讲师,硕士研究生,研究方向为计算机仿真
现代计算机2010.09 @
p str;
while(p)cout<< p++;
while(p) cout<< p++;
2 指针与一维数组
2.1数组元素引用的几种形式
若有一维数组声明为int a[4];假设每个int型元素
占用2个字节.内存分配如图1所示
a
6O0D
af0】
6001
a+
6Od2
a【1】
6003
a+
6004"
a【2】
6005
6006
a【3】
6O07
图1一维数组内存分配示意图
数组名a就是一个指针.但不能修改指针的指向.
对一维数组中元素的引用可采用 (a+i)。
若引入了指针,且指针的初始值指向a【0】,则此时
的指针可当作数组名使用。例如:首先声明指针P,int
p=a;指针指向如图2所示:
【0】
【1】
【2】
【3】
图2引入指针后的示意图
由图2可得,对元素的引用又可采用形式 fp+i)和
plil。总结以上引用方式。对一维数组元素的引用方式
有下面四种:a【玑p[i】、 (a+i)、 (p+i)。其中前两种属于下
标法.后两种属于指针法
2.2典型题目
分别使用下标法和指针法对一维数组进行输入输
@ 现代计算机2010.09
出。
①下标法
void main0
{
int af】0];
int i;
for(j:0;i<lO;i++)
cin>>a【i】;,/通过下标引用数组元素
for(i_0;i<lO;i++)
cout<<a【i】;
}
②指针法
void mainO
(
int a【10】;
int P,i;
for(p:a;p<(a+10);p++)
cin>> ;,/通过指针引用数组元素
for(p=a;p<(a+1 0);p++)
cout<< p;
l
3 指针与二维数组
3.1行地址与列地址
C++语言将二维数组看作一维数组.其每个数组
元素又是一个一维数组.假设二维数组的定义为int a
【2Ⅱ3】;则有下列关系如图3所示:
a
_厂
a
_[三
图3二维数组逻辑关系示意图
其中行列地址如图4所示
图4中以二维数组名形式出现的地址均为行地址.
例如a,a+O、a+l:以一维数组名形式出现的地址均为列
地址,例如a[0]、a[0]+0、a[0]+1、a【1]、a[1l+O、a【1】+1等。
而对行地址做 (取内容)运算后变成列地址,例
如 (a+1)=all1,由此可总结如下: .
a:数组名,代表第0行的地址;
a+i:代表第i行的地址(行地址):
(a+i):即a【i]代表第i行第0列的地址(列地址);
(a+i)+j:即a[il+j代表第i行第J列的地址;
①列指针
int p;
( (a+i)+j):即a[il[j]代表第i行第j列的元素。
P: a://用列地址初始化指针
for(i=0;i<n;i++)
orf 0:0;j<m;j++)
eout<< (p+i}m+j);,/相对于数组起始地址的偏移量为
i m ・
②行指针
P=a://用行地址初始化指针
‘ .
int(丰p)【3】;,/要定义成行指针的形式
or(f._0;i<n;i++)
ofr(j=0;j<m;j++)
cout<< (半(p+i)+j);
图4二维数组行列地址示意图
4 结语
指针和数组是C++中重要的复合数据类型.其他
3.2二维数组元素的引用
假设有二维数组a[31141,通过数组名引用二维数
基本数据类型int、double、char等可以作为它们的基类
型,而它们彼此也可以成为对方的基类型。对数组元素
的引用有下标法和指针法,尤其在二维数组中。行指针
和列指针是难点.本文是笔者结合自己教学体会对指
针和数组做了归纳总结.希望能帮助初学者更好地掌
握指针和数组
参考文献
组中第i行第j列的元素有以下四种方式:a[il[j】、 (a【i】+
j)、 ( (a+i)+j)、( (a+i))[j】。而通过指针引用二维数组中
第i行第i列的元素可通过以下方式:
首先声明一个行指针并初始化:int(术p)[4];p=a;四
种引用形式分别是: 】【j】、 (p【i]+j)、:.c( (p+i)+j)、(:l:(p+i))刚。
该四种形式与上述四种形式等价.即数组名和行
指针可相互替换。要注意此时必须是行指针,且必须声
明成数组指针的形式
【1】张琳梅,尚永强.浅谈C语言中的指针【J】.电脑知识与技术,
2008(35):2546-2549
[2】谭浩强.C++程序设计教程.北京:清华大学出版社,2004
【3】钱能.C++程序设计教程.北京:清华大学出版社,2005
3.3典型题目
分别通过行指针和列指针输出二维数组.假设二
维数组有m行n列
Simple Discussion on the Pointer and Array of C++
WANG Xiao-yan
(Department of Computer and Engineering,Huaiyin Institute of Technology,Huaiyin 223001)
Abstract:Pointer and array are dificultfies in C++language learning.the concept of pointer is diiculft to
understand and always used incorrectly.Array has relation to pointer closely,and the elements
of array can be used through pointer.The question which can be solved in array method usually
can be solved in pointer method too.Discusses on knowledge points including pointer,using
array elements,array pointer and analyzes through examples.
Keywords:Pointer;Array;C++
现代计算机2010.09 o
版权声明:本文标题:浅析C++中的指针和数组 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1710385886a570733.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论