C语言中指针与数组结合的分析与讨论.PDF
第2l卷第2期 三 明 高 等 专 科 学 校 学 报 20O4年6月
V0lI.2lNo.2 JOURNALOFSANMINGCOlJF.~GE Jun.2004
C语言中指针与数组结合的分析与讨论
黄 建 茂
(三明高等专科学校计算机科学系,福建三明 365004)
摘 要:首先阐述了地址、数组与指针的概念,随后通过分析推理的方法使指针与数组结合应
用这一复杂难以掌握的问题得以轻松解决。
关键词:c语言;地址;数组;指针;级别;等量替换
中图分类号:TP312 文献标识码:A 文章编号:1671一l343(2004)02一OO66—04
C语言中指针与数组这两个概念之间的联系是密不可分的,以至于如果不能理解一个概
念,就无法彻底理解另一个概念。应用数组能简化程序中数据量的处理,而指针是C语言最
具特色的语言成分,它是C语言的精华,可同时又是C语言中最复杂、最难掌握的语言点。只
有正确地掌握了指针的概念,正确而灵活地运用指针,才能方便有效的使用数组、使用字符串,
才能有效的表示复杂的数据结构、动态的分配内存,直接处理内存地址,使程序简洁、紧凑、高
效。可以说,若没有掌握指针,就没有真正掌握C语言。
!地址
C程序中每一个实体,如变量、数组和函数等,都要在内存中占有一个可标识的存储区域。
每一个存储区由若干个字节组成,在内存中每一个字节都有一个编号,这就是“地址”,而一个
存储区域的地“址”指的是该存储区域第一个字节的地址。
2 数组
数组是同类型数据的有序集合,即数组由若干数组元素组成,其中所有元素都属于同一个
数据类型,且数组的大小必须在编译期(即定义一个数组时)就作为一个常数确定下来。
在C语言中只有一维数组,而数组中的元素可是任何类型的对象,当然也可是另外一个
数组(即数组中的每个元素又是一个一维数组),这样,我们就可以仿“真”出一个多维数组了。
在C语言中,数组一旦定义,编译程序就会为每个数组安排一段连续的存储单元存放数
组的各个元素。数组名就是这段存储单元的首地址。对一维数组来说,各个元素顺序存放,对
多维数组来说,先按行的顺序,然后按列的顺序依次存放各个元素。
3 指针
指针是内存中的一个地址,是存放地址值的变量或常量,是地址更形象化的一个词语。依
此可把指针分为:指针变量和指针常量。指针变量是用于存放其他某一类型变量的地址的变
收稿日期:20∞.10-17
作者简介:黄建茂(1976一),男,福建莆田人,三明高等专科学校计算机科学系助理实验师。
56 ’
t
量,好比生活中的路标,当您看到路标时,就知道具体的目标位置应怎么走了。而指针常量是
指所引用的对象的地址不能改变的指针,如数组名。因此,我们可以认为指针就是地址。而指
针变量也就是地址变量,指针常量也就是地址常量。
4 指针的级与数组维数间的关系
指针的级与数组地址的级对应,即二级指针只能指向二级地址,一级指针只能指向一级地
址。若地址级别与指针级别不一致,则将导致类型不匹配的问题。C语言规定一维数组的首
地址是一级地址,二维数组的首地址是二级地址。
5 指针与数组的结合 r
指针这一概念在c语言中本身就是最复杂、最难掌握的知识点,而指针与数组结合在一起,就
使它们之间的关系更为复杂、更难掌握了,往往使学习及应用C语言的人感到眼花缭乱。以
下我们就通过分析推理的方法,来揭开C语言中最为“晦暗不明”的部分。
5.1指针与一维数组
首先,我们定义如下一维数组:
inta[5]={1,3,5,7,9};
c语言规定,数组名a代表数组的首地址,也就是数组中第一个元素的地址&a[O],则a等
价于e~a[O],这样可推理出a+1等价于&a[1]、a+2等价于e~a[2]、a+3等价于&a[3]、a+4等
价于&a[4]。通过各元素的地址表示方式对应地可推理出各元素的值的表示方式,其方法只
要在各元素地址的整体表示方式前简单地加上地址访问运算符 “*”,即可得到各元素值的表
示方式,推理结果如图1。