C语言第十五讲(指针与数组)

上传人:y****n 文档编号:103473151 上传时间:2022-06-08 格式:DOC 页数:12 大小:730.51KB
收藏 版权申诉 举报 下载
C语言第十五讲(指针与数组)_第1页
第1页 / 共12页
C语言第十五讲(指针与数组)_第2页
第2页 / 共12页
C语言第十五讲(指针与数组)_第3页
第3页 / 共12页
资源描述:

《C语言第十五讲(指针与数组)》由会员分享,可在线阅读,更多相关《C语言第十五讲(指针与数组)(12页珍藏版)》请在装配图网上搜索。

1、指针与数组 1掌握指向数组的指针及其运算。2掌握指向字符串的指针及其运算。 3掌握指针数组的概念和使用。 1. 指向数组的指针及运算 2指向字符串的指针及运算 (一)导课在C语言中,指针与数组关系密切,数组名代表整个数组存储区起始地址,而指针也是表示地址,所以把数组的起始地址或把某一数组元素的地址赋给指针变量,指针变量即指向了该数组的首地址或者数组元素,因此任何能用数组下标完成的操作都有可用指针来完成。(二)课程要点一、指向一维数组的指针变量将一维数组的名字或某一数组元素的地址赋给指针变量,指针变量即指向该一维数组或数组元素。例如:int a7, *p; p=a;定义一维数组a和指针变量p,通

2、过p=a;使p指向数组a的首地址,这时的*p就是a0的值。如右图所示。如果将数组元素a2的地址赋给变量p,即p=&a2;则指针变量p指向数组元素a2,这时的*p就是a2的值。如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。这里的p+1不是简单的将p值加1,而是p+1d,其中d是一个数组元素所占的字节数。如果p的初值是&a0,则p+3和a+3均表示a3的地址,如右图所示。 因此,引入了指针变量后,可以用两种方法来访问数组元素,下面通过例子说明。【例1】分别用下标法和指针法访问数组元素。#include void main() int a7=1,2,3,4,5,6,7;

3、int i,*p; 下标法for(i=0;i=6;i+)printf(%d,ai);printf(n);指针法 for(p=a;p=a+6;p+) printf(%d,*p);也可以用数组名计算数组元素的地址,或用带下标的指针变量来引用数组元素。将上面的程序改写如下:#include void main() int a7=1,2,3,4,5,6,7; int i,*p; p=a;用数组名计算数组元素的地址for(i=0;i=6;i+) printf(%d,*(a+i); printf(n); 用带下标的指针变量来引用数组元素for(i=0;i=6;i+) printf(%d,pi);二、指向多

4、维数组的指针变量C语言允许把多维数组分为多个一维数组来处理,以二维数组为例。如有定义:int a23=1,2,3,4,5,6; 数组名a代表二维数组的首地址,即二维数组0行的起始地址。二维数组名是指向行的。因此a+1代表第1行的首地址。而a0、a1可以分别看作是二个一维数组的数组名,是指向列元素的。因此它们分别代表第0行一维数组中的第0个元素的地址,即&a00,a0+1是0行1列元素a01的地址,由此ai+j是一维数组ai的第j列元素首地址,即等于&aij。则指向二维数组的指针对变量说明形式为:类型说明符 (*指针变量名)数组长度“类型说明符”为所指数组的数据类型。,“*”表示其后的变量是指针

5、类型。“数组长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。例如:int a23; int (*p)3; p=a;【例2】使用指针变量输出二维数组各元素的值。#include void main() int a23=1,2,3,4,5,6; int (*p)3; int i,j; p=a; for(i=0;i2;i+) for(j=0;j3;j+) printf(%3d,*(*(p+i)+j); printf(n); 上述程序也可作如下修改: #include void main() int a23=1,2,3,4,5,6; int *p; int i,j; p=

6、a; for(i=0;i2;i+) p=ai; for(j=0;j3;j+) printf(%3d,*p); p+; printf(n); 【例3】运用指向二维数组的行指针变量,计算4名同学3门功课的总平均分。#include void main()float score43=67,89,90,87,77,91,69,96,78,79,86,90;float(*p)3,sum=0,aver;int i,j;p=score;for(i=0,i4;i+) for(j=0,j3;j+) sum+=*(*(p+i)+j);aver=sum/12;printf(“average=%5.1fn”,aver

7、);三、指针与字符串字符串在C语言中是用字符数组存放的,也可以用字符指针指向字符串,然后通过指针变量对字符串进行访问。例如:char str=hello,*p;p=str;也可以定义为:char *str=hello;虽然没有定义存放字符串常量的字符数组,但系统在内存中还是将该字符串作为字符数组来处理的,即开辟一片连续的存储空间存放字符串。下面的程序用于输出字符串hello。程序运行结果:hellomain() char *str=hello; printf(%sn,str);如果将输出语句改为:printf(%sn,str+3);输出结果为:lo如果将输出语句改为:printf(%cn,*s

8、tr);输出结果为:h【例4】运用指针变量,把字符串a复制到字符串b中。 #include void main() char *a=this is a book; char b20,*p,*q; p=a;q=b; while(*p!=0) *q=*p; p+; q+; *q=0; printf(%sn,a); printf(%sn,b);【例5】在输入的字符串中查找有无a字符。#include void main() char str20,*p; int i; printf(input a string:); p=str; scanf(%s,p); for(i=0;pi!=0;i+) if(pi=a) printf(there is a a in the string.n); break; if(pi=0) printf(There is no a in the string.n);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!