浅析C语言数组与指针

浅析C语言数组与指针

ID:19170773

大小:16.04 KB

页数:6页

时间:2018-09-29

浅析C语言数组与指针_第1页
浅析C语言数组与指针_第2页
浅析C语言数组与指针_第3页
浅析C语言数组与指针_第4页
浅析C语言数组与指针_第5页
资源描述:

《浅析C语言数组与指针》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、浅析C语言数组与指针  在C语言中数组表示一组数据类型都一样的有序数据的集合,在内存中,它们占有连续的存储单元,数组分一维数组和多维数组,一维数组是数组中最简单的,比较容易理解,用一个数组名和一个下标就能唯一地确定一个元素。多维数组理解相对抽象些,以二维数组举例,二维数组在内存中虽然是占一个连续的存储单元,但是习惯上把它写成矩阵的形式,更有助于理解其逻辑结构,二维数组每一行都可以看成一个一维数组。任何数组它们的数组名代表数组的首地址。而指针是C语言的另一个重要概念,指针代表地址,并且指针是可以移动的,对于数组和指针的使用

2、,初学者往往感到无所适从,笔者根据多年经验,利用等级考试中的典型实例来进行描述和分析,所有实例如都在环境下通过,希望初学者能快速理解和掌握。  1指向一维数组指针的定义及数组元素的引用  定义指向数组元素的指针变量的方法,与定义指向变量的指针变量相同,假设定义了一个一维数组inta[5]和一个指针变量int*p,如何让指针变量指向数组呢?对于一维数组来说,只要让指针变量指向它的数组元素就可以,因为数组名a代表数组的首地址,所以p=&a[0]或p=a都表示指针指向数组的第一个元素,直接定义可以写成int*p=a。而p+1表

3、示指向下一个元素,p-1表示指向数组上一个元素,这样,其后面第i个元素它的地址就可以表示成p+i,也可以表示成a+i。  若p指向a[0],而a[i]的地址可以用p+i或a+i表示,所以,引用数组元素的时候,既可以用普通的下标法如a[i]形式,也可以用指针法,这时*和*都可以表示a[i]元素。  例1:#include  voidmain  {inta[6]={10,20,30,40,50,60},*p,i=3;  p=&a[1];  printf;}  实例分析:此实例中,定义了一个指针指向a[1],i的值为3,输出a

4、[3]和p[3]的值,很多初学者以为p[i]的写法是错误的,有的初学者则认为a[3]和p[3]等价,输出结果是40,40,但实际上,在C语言中,指针变量可以带下联盟标,程序在编译时,会把下标的处理转换为地址的,p[i]处理成*,因为一开始的时候p指向a[1],那么p+i则表示往后数第三个元素,也就是a[4],故此程序输p出结果为40,50。若一开始p=a,也就是说指针指向第一个元素,那么a[i]和p[i]的值就是相等的。  指针与自增自减运算符的结合  指针若与自增自减运算符结合起来使用,初学者最容易出错,以自增运算符为

5、例,若程序中出现*p++、*、*、++等算式,看起来差不多,很多初学者搞不懂它们之间的区别,殊不知“失之毫厘,谬以千里”,因为不懂它们的区别,分析程序时往往得到错误的结果。  首先,大家要知道“*”和“++”都是单目运算符,它们同一个优先级,其结合方向是自右向左的,所以*p++和*等价,根据自增运算符的“名前先取”原则,要先取*p的值,再使p自增1,即指向下一个数组元素,*则是先使p指向下一个元素,再取*p的值,这几个算式都是对所指的地址加1。++表示先取*p,再在这个值的基础上加1,也就是对所指的元素的值加1。  例2

6、:#include  voidmain  {inta[5]={2,4,6,8,10},*p,**k;  p=a;k=&p;  printf);  printf;}  实例分析:此实例中,自先定义了数组a,指针p和指向指针的指针k,通过p=a和k=&p语句,使指针p指向数组a的首地址,k指向指针p,接下来printf)语句,是先输出*p的值为2,再使指针往后指,再输出**k的指也就是*p的值,此时,p指向4,输出4,程序的输出结果为“2”。  指向二维数组指针的定义及数组元素的引用  在使用指针指向二维数组时首先要了解多维

7、数组元素的地址表示方式,假设有二维数组a[3][3],那么在逻辑上可以把这个二维数组看作是一个3行3列的表格,也可以看成是一个有3个元素的一维数组,该数组的每个元素也是一个一维数组,序号为0的行的首地址可以用a[0]、&a[0]或a表示,序号为1的行的首地址可表示为a[1]、&a[1]或a+1,如图1所示。根据一维数组指针的定义,a[0]的值可以又表示成为*a,a[1]可以表示为*,a[i]即为*。序号为0的行的首地址也就是元素a[0][0]的地址,即&a[0][0],它后面几个元素的地址可以表示为a[0]+1,a[0]

8、+,若用指针法表示为*、*+1和*+2,以此类推,第i行第j列元素的地址&a[i][j]可以表示成为a[i]+j,指针法表示为*+j,也就是说&a[i][j]、a[i]+j、*+j是等价的。这样,对于一个二维数组来说,元素a[i][j]可用指针法表示为*或*+j)。指针变量指向二维数组中的元素,可以有两种定义指针方法

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。