C语言程序设计第指针程序设计.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计第指针程序设计.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计第指针程序设计.pptx(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、7.1 指针概述u指针与指针变量u变量的直接访问和间接访问第1页/共48页7.1 指针概述 指针与指针指针与指针变量变量某个某个变量所占用的内存空间的开始地址称为该变量的地址,变量所占用的内存空间的开始地址称为该变量的地址,C C语言将这一地语言将这一地址称为指针,存储这一地址的变量称为指针变量。址称为指针,存储这一地址的变量称为指针变量。通过指针变量可以实现对其他变量的访问。通过指针变量可以实现对其他变量的访问。指针变量可以指向任何一种数据类型,如可以指向基本类型的变量,指针变量可以指向任何一种数据类型,如可以指向基本类型的变量,也可以指向数组等。也可以指向数组等。第2页/共48页7.1 指
2、针概述 变量直接访问变量直接访问是指通过变量名直接使用变量数据。是指通过变量名直接使用变量数据。例如:例如:int a=10,b=20,c;int a=10,b=20,c;c=a+b;c=a+b;printf(%dn,c);printf(%dn,c);变量间接访问变量间接访问是指通过指针变量去访问其他变量数据。是指通过指针变量去访问其他变量数据。第3页/共48页7.2 指针变量的定义和使用u7.2.1 指针变量程序示例 u7.2.2 定义指针变量u7.2.3 使用指针变量 第4页/共48页7.2.1 指针变量程序示例例例7-17-1 使用指针变量输出数据程序。#includeint main(
3、void)int a=2008;int*p;int*p;p=&a;p=&a;printf(%dn,*p*p);return 0;定义指针变量 p指向a 用*p表示变量a的值 第5页/共48页7.2.2 定义指针变量一般格式 数据类型数据类型*指针变量名1,*指针变量名2,;例如:intint*p1,*p2;floatfloat*q;指针变量允许和其他变量同时定义:charchar m,n,*p,*,*,*,*q;l注意“数据类型数据类型”是指针变量要指向的变量的数据类型是指针变量要指向的变量的数据类型。第6页/共48页7.2.3 7.2.3 使用指针变量1指针变量的初始化一般格式 数据类型*指
4、针变量名1=地址1,*指针变量名2=地址2,;例如:int m;int*p=&m;2指针变量的赋值l一般格式一般格式 指针变量指针变量=变量地址变量地址;例如:例如:int m=196,*p,*qint m=196,*p,*q;p=&mp=&m;q=pq=p;pm&m p196&mq q第7页/共48页7.2.3 7.2.3 使用指针变量3 3使用指针变量输入数据使用指针变量输入数据当指针变量有了确切的指向目标后,即可使用该指针变量为指向的目标输入数据。int score,*p;p=&score;scanf(%d,p p);scanf语句的功能与下列语句等价:scanf(%d,&score&s
5、core);第8页/共48页7.2.3 7.2.3 使用指针变量4 4指向运算指向运算“*”与目标访问与目标访问对于指针变量p,访问其指向的变量时,使用“*”运算符:*p例如,对上面的程序段,输出变量score的数据:printf(%d,*p*p);其中,*p表示p指向的目标score。第9页/共48页例例7-27-2定义指针变量p1、p2,并任意输入两个整数a、b,使得p1指向其中的较大值,p2指向其中的较小值。#includeint main()int*p1,*p2,*p,a,b;printf(Input:);scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)p=p
6、1;p1=p2;p2=pp=p1;p1=p2;p2=p;printf(Output:);printf(%d,%dn,*p1,*p2);return 0;7.2.27.2.2使用指针变量第10页/共48页7.3 指针与数组u7.3.1 指针与一维数组 u7.3.2 指针与二维数组 u7.3.3 指针与字符串 u7.3.4 指针数组 第11页/共48页7.3.1指针与一维数组 主要内容如何把一个指针和一维数组关联起来,即怎样使指针指向一维数组如何使用指针访问一维数组的元素l要解决的问题用指针实现一维数组的数据处理 第12页/共48页C C C C语言程序设计语言程序设计语言程序设计语言程序设计-理
7、论方法与实践(第理论方法与实践(第理论方法与实践(第理论方法与实践(第2 2 2 2版)版)版)版)7.3.1用指针访问一维数组 1 1指针与一维数组的关系指针与一维数组的关系 对于长度是N的一维数组a,当当使使用用指指针针p p指指向向其其首首元元素素后后,即即可可通通过过指指针针p p访访问问数数组组的的各各个元素个元素。简单类型数组aa0用*p表示a1用*(p+1)表示 aiai用*(p+i)(p+i)表示 指向一位数组指向一位数组的指针变量的指针变量第13页/共48页C C C C语言程序设计语言程序设计语言程序设计语言程序设计-理论方法与实践(第理论方法与实践(第理论方法与实践(第理
8、论方法与实践(第2 2 2 2版)版)版)版)7.3.1用指针访问一维数组 2 2定义和使用指向一维数组的指针变量定义和使用指向一维数组的指针变量 若有定义:int aN,*p;int aN,*p;/*N为符号常量*/则以下任何语句都能使指针变量p指向一维数组ap=a;p=a;p=&a0;p=&a0;当指针变量p指向a数组之后,就可以使用p访问a数组的元素。例如,可以使用下面的语句输出元素a0和a1的值。printf(“%d,%d”,*p,*(p+1)”,*p,*(p+1);第14页/共48页7.3.1用指针访问一维数组 例例7-37-37-37-3 用指针实现一维数组的输入输出。l程序一程序
9、一#include#define N 10int main()int aN;int*p=a,i;for(i=0;iN;i+)scanf(%d,p+i);for(i=0;iN;i+)printf(%d,*(p+i)*(p+i););return 0;return 0;&ai&ai&ai&aiaiaiaiai第15页/共48页C C C C语言程序设计语言程序设计语言程序设计语言程序设计-理论方法与实践(第理论方法与实践(第理论方法与实践(第理论方法与实践(第2 2 2 2版)版)版)版)7.3.1用指针访问一维数组 例例7-37-37-37-3 用指针实现一维数组的输入输出。l程序二程序二#in
10、clude#define N 10int main()int aN;int*p=a,i;for(i=0;iN;i+)scanf(%d,p+);p=a;for(i=0;iN;i+)printf(%d,*p+*p+););return 0;return 0;&ai&ai&ai&aiaiaiaiai第16页/共48页C C C C语言程序设计语言程序设计语言程序设计语言程序设计-理论方法与实践(第理论方法与实践(第理论方法与实践(第理论方法与实践(第2 2 2 2版)版)版)版)7.3.1用指针访问一维数组 例例7-37-37-37-3 用指针实现一维数组的输入输出。l程序三程序三#include#
11、define N 10int main(void)int aN,*p;for(p=a;p(a+N);p+)scanf(%d,p);for(p=a;p(a+N);p+)printf(%d,*p);return 0;&ai&ai&ai&aiaiaiaiai第17页/共48页7.3.1用指针访问一维数组 例例7-4 7-4 用指针法访问数组,求得一维数组元素的最大值。#include#define N 10int main(void)int aN,i,max,*p;,*p;p=a;printf(Data:);for(i=0;iN;i+)scanf(%d,p+ip+i);max=*p;max=*p;f
12、or(i=1;iN;i+)if(max*(p+i)if(max*(p+i)max=*(p+i);max=*(p+i);printf(Max:%dn,max);return 0;第18页/共48页7.3.2 指针与二维数组主要内容如何把一个指针和二维数组关联起来,即怎样使指针指向二维数组如何使用指针访问二维数组的元素l要解决的问题要解决的问题用指针实现二维数组的数据处理用指针实现二维数组的数据处理 第19页/共48页7.3.2 指针与二维数组102030408070605018273645l回顾二维数组的存储 10a0020a0130a0240a0380a1070a1160a1250a1318a
13、2027a2136a2245a23int a34;p pp+1p+1p+2p+2p+3p+3p+4p+4p+5p+5p+6p+6p+7p+7p+8p+8p+9p+9p+10p+10p+11p+11如何使如何使p p指向首元素?指向首元素?aijaij的指针如何表示?的指针如何表示?n n 问题问题第20页/共48页7.3.2 指针与二维数组 指针和二维数组元素的对应关系指针和二维数组元素的对应关系设设p p是指针变量,若有:是指针变量,若有:p=a0;p=a0;则则p+jp+j将指向将指向a0a0数组中的元素数组中的元素a0ja0j。由于由于a0a0、a1a1、aM-1aM-1等各个行数组依次
14、连续存储,等各个行数组依次连续存储,则对于则对于a a数组中的任一元素数组中的任一元素aijaij,指针的一般形式如下:,指针的一般形式如下:p+i*N+jp+i*N+j元素元素aijaij相应的指针表示为:相应的指针表示为:*(p+i*N+j)(p+i*N+j)aijaij也可用指针下标法表示:也可用指针下标法表示:pi*N+jpi*N+j第21页/共48页7.3.2 指针与二维数组 举例举例int int a34=10,20,30,40,50,60,70,80,90,91,92,93;a34=10,20,30,40,50,60,70,80,90,91,92,93;int*p=a0;int*
15、p=a0;则数组则数组a a的元素的元素a12a12对应的指针为:对应的指针为:p+1*4+2p+1*4+2元素元素a12a12也就可以表示为:也就可以表示为:*(p+1*4+2)(p+1*4+2)用下标表示法,用下标表示法,a12a12表示为:表示为:p1*4+2p1*4+2第22页/共48页7.3.2 指针与二维数组例例7-5 7-5 用指针访问二维数组的方法,求二维数组元素的最大值。用指针访问二维数组的方法,求二维数组元素的最大值。#include#includeint main(void)int main(void)int a34=3,17,8,11,66,7,8,19,12,88,7
16、,16;int a34=3,17,8,11,66,7,8,19,12,88,7,16;int*p,max;int*p,max;for(p=a0,max=*p;pa0+12;p+)for(p=a0,max=*p;pmax)if(*pmax)max=*p;max=*p;printf(Max=%dn,max);printf(Max=%dn,max);return 0;return 0;第23页/共48页7.3.3 指针与字符串 使字符型指针变量指向字符串的方法使字符型指针变量指向字符串的方法 定义指针变量时初始化指向字符串。定义指针变量时初始化指向字符串。char*p=a string;char*p
17、=a string;使指针变量指向字符型数组,从而使其指向字符串。char name20,*str;gets(name);str=name;第24页/共48页7.3.3 指针与字符串例例7-67-6从键盘输入一个字符串,统计其中的数字字符从键盘输入一个字符串,统计其中的数字字符个数。个数。#include#include#define N 100#define N 100int main(void)int main(void)char strN,*p;char strN,*p;int count;int count;p=str;p=str;gets(gets(p p););for(count=
18、0 for(count=0;*p!=0;p+);*p!=0;p+)if if(*p=0&*p=0&*p=9)count+;count+;printf(Total:%dn,count);printf(Total:%dn,count);return 0;return 0;第25页/共48页7.3.4 指针数组 数组元素为指针类型的数组称为指针数组数组元素为指针类型的数组称为指针数组,指针数组中的每一个元素都是指针变量。一维指针数组的定义形式如下:数据类型数据类型*数组名数组名 数组长度数组长度;例:例:char*days7;该语句定义了一个名为days的字符型指针数组,其每一个元素都是指向char
19、变量的指针变量。指针数组的每个元素是指针变量,只能存放地址,所以对指向字符串的指针数组赋初值时,要把存放字符串的首地址赋给指针数组的对应元素。例:例:char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;第26页/共48页C C C C语言程序设计语言程序设计语言程序设计语言程序设计-理论方法与实践(第理论方法与实践(第理论方法与实践(第理论方法与实践(第2 2 2 2版)版)版)版)7.3.4 指针数组指针数组元素指针数组元素days0days0days1days1days2days2days3days3day
20、s4days4days5days5days6days6字符串字符串字符串字符串SundaySundayMondayMondayTuesdayTuesdayWednesdayWednesdayThursdayThursdayFridayFridaySaturdaySaturdaychar*days7char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;第27页/共48页7.3.4 指针数组char*days7char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Fr
21、iday,Saturday;例例例例7-77-7 分行输出分行输出days数组指向的字符串。数组指向的字符串。#includeint main()int i;char*days7*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;for(i=0;i7;i+)puts(daysidaysi);return 0;第28页/共48页7.4 指针作函数的参数 7.4.1 7.4.1 简单变量指针作函数参数简单变量指针作函数参数 7.4.2 7.4.2 指向数组的指针作函数的参数指向数组的指针作函数的参数 7.4.3 7.4.3
22、 字符串指针作函数的参数字符串指针作函数的参数 7.4.4 7.4.4 指针数组作指针数组作函数的参数函数的参数第29页/共48页实参:简单实参:简单变量地址变量地址void swap(int*p1,int*p2)void swap(int*p1,int*p2)int temp;int temp;temp=*p1;temp=*p1;*p1=*p2;*p1=*p2;*p2=temp;*p2=temp;7.4.1 简单变量指针作函数参数形参:指针形参:指针变量变量#include#includeint main()int main()void swap(int*,int*);void swap(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 指针 程序设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内