正文描述:《浅析c语言数组与指针》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、浅析C语言数组与指针浅析C语言数组与指针在C语言中数组表示一组数据类型都一样的有序数据的集合,在内存中,它们占有连续的存储单元,数组分一维数组和多维数组,一维数组是数组中最简单的,比较容易理解,用一个数组名和一个下标就能唯一地确定一个元素。多维数组理解相对抽象些,以二维数组举例,二维数组在内存中虽然是占一个连续的存储单元,但是习惯上把它写成矩阵的形式,更有助于理解其逻辑结构,二维数组每一行都可以看成一个一维数组。任何数组它们的数组名代表数组的首地址。而指针是C语言的另一个重要概念,指针代表地址,并且指针是可以移动的,对于数组和指针的使用,初学者往往感到无所适从,笔者根据多年经验
2、,利用等级考试中的典型实例来进行描述和分析,所有实例如都在VC6.0环境下通过,希望初学者能快速理解和掌握。 1指向一维数组指针的定义及数组元素的引用 定义指向数组元素的指针变量的方法,与定义指向变量的指针变量相同,假设定义了一个一维数组inta[5]和一个指针变量int*p,如何让指针变量指向数组呢?对于一维数组来说,只要让指针变量指向它的数组元素就可以,因为数组名a代表数组的首地址,所以p=a[0]或p=a都表示指针指向数组的第一个元素,直接定义可以写成int*p=a。而p+1表示指向下一个元素,p-1表示指向数组上一个元素,这样,其后面第i个元素它的地址就可以表示成p
3、+i,也可以表示成a+i。 若p指向a[0],而a[i]的地址可以用p+i或a+i表示,所以,引用数组元素的时候,既可以用普通的下标法如a[i]形式,也可以用指针法,这时*(p+i)和*(a+i)都可以表示a[i]元素。 例1:#include voidmain() {inta[6]={10,20,30,40,50,60},*p,i=3; p=a[1]; printf(%d,%d\n,a[i],p[i]);} 实例分析:此实例中,定义了一个指针指向a[1],i的值为3,输出a[3]和p[3]的值,很多初学者以为p[i]的写法是错误的,有的初学者则认为a[3]和p[
4、3]等价,输出结果是40,40,但实际上,在C语言中,指针变量可以带下本文由.L.收集整理标,程序在编译时,会把下标的处理转换为地址的,p[i]处理成*(p+i),因为一开始的时候p指向a[1],那么p+i则表示往后数第三个元素,也就是a[4],故此程序输p出结果为40,50。若一开始p=a,也就是说指针指向第一个元素,那么a[i]和p[i]的值就是相等的。 2指针与自增自减运算符的结合 指针若与自增自减运算符结合起来使用,初学者最容易出错,以自增运算符为例,若程序中出现*p++、*(p++)、*(++p)、++(*p)等算式,看起来差不多,很多初学者搞不懂它们之间的区别,
5、殊不知失之毫厘,谬以千里,因为不懂它们的区别,分析程序时往往得到错误的结果。 首先,大家要知道*和++都是单目运算符,它们同一个优先级,其结合方向是自右向左的,所以*p++和*(p++)等价,根据自增运算符的名前先取原则,要先取*p的值,再使p自增1,即指向下一个数组元素,*(++p)则是先使p指向下一个元素,再取*p的值,这几个算式都是对所指的地址加1。++(*p)表示先取*p,再在这个值的基础上加1,也就是对所指的元素的值加1。 例2:#include voidmain() {inta[5]={2,4,6,8,10},*p,**k; p=a;k=p; print
6、f(%d,*(p++)); printf(%d\n,**k);} 实例分析:此实例中,自先定义了数组a,指针p和指向指针的指针k,通过p=a和k=p语句,使指针p指向数组a的首地址,k指向指针p,接下来printf(%d,*(p++))语句,是先输出*p的值为2,再使指针往后指,再输出**k的指也就是*p的值,此时,p指向4,输出4,程序的输出结果为24。 3指向二维数组指针的定义及数组元素的引用 在使用指针指向二维数组时首先要了解多维数组元素的地址表示方式,假设有二维数组a[3][3],那么在逻辑上可以把这个二维数组看作是一个3行3列的表格,也可以看成是一个有3个元素
7、的一维数组,该数组的每个元素也是一个一维数组,序号为0的行的首地址可以用a[0]、a[0]或a表示,序号为1的行的首地址可表示为a[1]、a[1]或a+1,如图1所示。根据一维数组指针的定义,a[0]的值可以又表示成为*a,a[1]可以表示为*(a+1),a[i]即为*(a+i)。序号为0的行的首地址也就是元素a[0][0]的地址,即a[0][0],它后面几个元素的地址可以表示为a[0]+1,a[0]+2,若用指针法表示为*(a+0)、*(a+0)+1和*(a+0)+2,以此类推,第i行第j
显示全部收起
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。