版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1请将您的手机铃声请将您的手机铃声设置为震动设置为震动2作业作业&实验报告实验报告3200020022004200620082000aa+1a+2a+3a+4*a*(a+1)*(a+2)*(a+3)*(a+4)a0a1a2a3a4数组地址数组地址数组元素数组元素pp+1p+2p+3p+4*p*(p+1)*(p+2)*(p+3)*(p+4)p0p1p2p3p4则:则:ai pi *(p+i) *(a+i)若若p=&a0,则,则p=a复复 习习 回回 顾顾4数组名数组名a是地址是地址常量常量p+i是是ai的地址的地址数组元素可用数组元素可用下标法下标法和和指针法指针法表示表示复复
2、习习 回回 顾顾例:例:int a10,*p=a;pi ai *(p+i) *(a+i)5数组名数组名a是地址是地址常量常量p+i是是ai的地址的地址数组元素可用数组元素可用下标法下标法和和指针法指针法表示表示例:例:int a10,*p=a;形参数组实质是形参数组实质是指针变量指针变量int a int *p复复 习习 回回 顾顾6数组名数组名a是地址是地址常量常量p+i是是ai的地址的地址数组元素可用数组元素可用下标法下标法和和指针法指针法表示表示例:例:int a10,*p=a;形参数组实质是形参数组实质是指针变量指针变量系统给系统给p分配保存一个指针值的内存区分配保存一个指针值的内存区
3、(2字节字节);而给而给a分配分配2*10字节的内存区字节的内存区复复 习习 回回 顾顾7新课讲授新课讲授v指针与字符串指针与字符串v指针与二维数组指针与二维数组v数组指针数组指针v指针数组指针数组v函数指针函数指针v多级指针多级指针8字符串表示形式字符串表示形式指针与字符串指针与字符串用字符指针实现用字符指针实现用字符数组实现用字符数组实现例:例:char name20=abcd;例:例:char *name=abcd;9 #includestdio.h void main( ) char *string=I love China!; printf(%sn,string); string+=
4、7; while(*string) putchar(*string); string+; 指针与字符串指针与字符串10 char str20; 与与 char *cp;str由若干单元组成,每单元存一个字符由若干单元组成,每单元存一个字符cp中存放字符串首地址中存放字符串首地址 char str20; str=I love China!; ( ) char *cp; cp=I love China!; ( )str是地址常量;是地址常量;cp是地址变量是地址变量cp接受键入字符串时接受键入字符串时,必须先开辟存储空间必须先开辟存储空间小小 结结11aa+1a+2*(*(a+0)+1)*(a0+
5、1)int a34;a0a1a2200020082016200020082016a00a01a10a11a20a21a02a03a12a13a22a23a0+1a1+1a2+1*(a+0)+1*(a+1)+1*(a+2)+1例:例:二维数组二维数组12345678910111212对二维数组对二维数组 int aij,有有a:二维数组的首地址,即二维数组的首地址,即第第0行行的首地址的首地址a+i:第第i行行的首地址的首地址ai*(a+i):第第i行第行第0列列的元素地址的元素地址ai+j*(a+i)+j:第第i行第行第j列列的元素地的元素地址址*(ai+j) *(*(a+i)+j) aij为
6、数组为数组元素元素注意:注意:a+i=&ai=ai=*(a+i)=&ai0 值相等,含义不同值相等,含义不同指针与二维数组指针与二维数组a+i&ai:第第i行行首地址首地址ai*(a+i)&ai0:第第i行第行第0列列元素地址元素地址13a00a01a10a11a20a21a02a03a12a13a22a23元素表示:元素表示:a12*(a1+2)*(*(a+1)+2)地址表示:地址表示:(1) a(2) a+1(3) &a10(4) a1行指针行指针列指针列指针地址表示:地址表示:&a12a1+2*(a+1)+2例:例:二维数组二维数组int
7、a34;行指针行指针14表示形式表示形式含义含义地址地址a数组第数组第0行首地址行首地址a0,*(a+0),*a第第0行第行第0列元素地址列元素地址a+1数组第数组第1行首地址行首地址a1,*(a+1)第第1行第行第0列元素地址列元素地址a1+2,*(a+1)+2,&a12第第1行第行第2列元素地址列元素地址*(a1+2),*(*(a+1)+2),a12第第1行第行第2列元素值列元素值200020002008200820127小小 结结例例 指向二维数组的指针变量指向二维数组的指针变量#include stdio.hvoid main() int a23=1,2,3,4,5,6; in
8、t *p; for(p=a0;pa0+6;p+) if(p-a0)%3=0) printf(n); printf(%4d ,*p); p=*a; p=&a00; p=*(a+0); p=a; a00a01a10a11a02a12p12345616数组指针数组指针形式:形式:数据类型数据类型 ( (* *指针名指针名) ) 一维数组维数一维数组维数;例如:例如:int (*p)4; p=a;( )不能少不能少int (*p)4与与int *p4不同不同17数组指针数组指针例如:例如:int (*p)3;p的值是一维数组的的值是一维数组的首地址,首地址,p是是行指针行指针a00a01a10
9、a11a02a12pp+1一维数组指针变量一维数组指针变量维数维数和和二维数组的二维数组的列数列数必须相同必须相同18例例 一维数组指针变量举例一维数组指针变量举例#include stdio.hvoid main() int a23=1,2,3,4,5,6; int i,j,(*p)3=a; for(i=0;i2;i+) for(j=0;j3;j+) printf(%d ,*(*(p+i)+j); printf(n);p=a0; p=*a; p=&a00; p=&a0; a00a01a10a11a02a12pp12345619例例 3 3个学生各学个学生各学4 4门课,查找一
10、门以上门课,查找一门以上课不及格学生,输出其各门课课不及格学生,输出其各门课成绩成绩void search(float (*p)4, int n) int i,j,flag; for(i=0;in;i+) flag=0;for(j=0;j4;j+) if(*(*(p+i)+j)60) flag=1;if(flag=1) printf(%d is fail:n,j+1); for(j=0;j4;j+)printf(%f,*(*(p+i)+j); printf(n); 6552 79608087908190 99 100 98p20二维数组名是一个二维数组名是一个地址常量地址常量p=a+i 使使p
11、指向二维数组的第指向二维数组的第i行行*(*(p+i)+j) aij 二维数组形参实际上是一维数组指针变量二维数组形参实际上是一维数组指针变量 即即 int p 10 int (*p)10系统给系统给p分配能保存一个指针值的内存区分配能保存一个指针值的内存区 (2字节字节);而给;而给a分配分配2*5*10字节的内存区字节的内存区int a510 与与 int (*p)10;小小 结结21赋值与初始化:赋值与初始化:指针数组指针数组定义:定义:数组中的元素为指针变量数组中的元素为指针变量形式:形式:数据类型数据类型 *数组名数组名数组长度数组长度;例子:例子:int *p4;#include
12、stdio.hvoid main() int b23; int *p =b0,b1; .b00b01b10b11b02b12b0b112345622赋值与初始化:赋值与初始化:指针数组指针数组定义:定义:数组中的元素为指针变量数组中的元素为指针变量形式:形式:数据类型数据类型 *数组名数组名数组长度数组长度;例子:例子:int *p4;#include stdio.hvoid main() int b23; int *p2=b0,b1; .b00b01b10b11b02b12p0p112345623L i s p 0F o r t r a n 0B a s i c 0p0p1p2p30#inc
13、lude stdio.hvoid main() char a=Fortran,b=Lisp; char char c=Basic; char *p4; p0=a; p1=b; p2=c; p3=0; .指针数组指针数组#include stdio.hvoid main() char *p4; p0= Fortran; p1= Lisp; p2= Basic; p3= 0; .指针数组指针数组L i s p 0F o r t r a n 0B a s i c 0p0p1p2p3025 char a37=gain, much, strong; char *n3=gain, much, strong
14、;g a i n 0a0a1a2mu c h 0s t r o n g 0指针数组指针数组g a i n 0n0n1n2m u c h 0s t r o n g 026例例 编写程序对若干字符串由小到大排序并输出编写程序对若干字符串由小到大排序并输出 for(i=0;iSIZE-1;i+) P139 k=i; for(j=i+1;j0) k=j; if(k!=i) strcpy(temp,coursek); strcpy(coursek,coursei); strcpy(coursei,temp); 27例例 编写程序对若干字符串由小到大排序并输出编写程序对若干字符串由小到大排序并输出 for
15、(i=0;iSIZE-1;i+) P140 k=i; for(j=i+1;j0) k=j; if(k!=i) temp=coursei; coursei=coursek; coursek=temp; 28 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量例:例:p=max;29 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:
16、数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量调用调用: c=max(a,b);c=(*p)(a,b)c=p(a,b)对函数指针变量对函数指针变量p n, p+, p-无意义无意义例例 用函数指针求最大、小值及求和用函数指针求最大、小值及求和#include stdio.hvoid main() int a,b,max(int,int), min(int,int),add(int,int); void process(int,int,int(*fun)();
17、 scanf(%d,%d,&a,&b); process(a,b,max); process(a,b,min); process(a,b,add);void process(int x,int y,int(*fun)() int result; result=(*fun)(x,y); printf(%dn,result);max(int x,int y) printf(max=); return(xy?x:y);min(int x,int y) printf(min=); return(xy?x:y);add(int x,int y) printf(sum=); return(
18、x+y);31例子:例子:char *pp, *p, ch=A; p=&ch; pp=&p; 概念:概念:指向指针的指针指向指针的指针 &p&chApppch多级指针多级指针定义:定义:类型标识符类型标识符 * * *指针变量名;指针变量名;注意:注意:* *的个数代表级数的个数代表级数32多级指针多级指针MathEnglishData structureCInternetcourse0course1course2course3course4pchar *course5=Math,English,Data structure,C, Internet, *p=course;33多级指针多级指针表表 达达 形形 式式 含含 义义 (p+i), (course+i)*(p+i)+0, coursei+0*(*(p+i)+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合肥事业单位招聘笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2025南瑞集团(国网电力科学研究院)高校毕业生招聘11人(第三批)易考易错模拟试题(共500题)试卷后附参考答案
- 2025北京建工土木工程限公司校园招聘40人易考易错模拟试题(共500题)试卷后附参考答案
- 2025内蒙古鄂尔多斯达拉特旗建设投资集团限公司招聘工作人员28人易考易错模拟试题(共500题)试卷后附参考答案
- 2025云南红河州蒙自市城市建设投资限责任公司招聘派遣制人员3人易考易错模拟试题(共500题)试卷后附参考答案
- 2025云南事业单位联考招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025中船重工第七0九研究所招聘140人+易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广州铁路职业技术学院单招职业适应性考试必刷测试卷附答案
- 2025中国铁路北京局集团招聘全日制普通高校毕业生765人(一)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年宜春幼儿师范高等专科学校单招职业技能测试题库新版
- 无尘室的培训课件
- 人证网约车考试题目及答案
- 房地产销售公司客户档案管理细则
- 物料编码规则培训
- 教育舆情预防与应对策略
- 长江存储培训课件
- 米厂安全检查管理制度
- 假劣药事件讲课件
- 冷轧硅钢生产线项目可行性研究报告(范文模板)
- 产品寻宝活动方案
- 农旅项目可行性分析报告
评论
0/150
提交评论