C程序设计:C语言第十三次课

上传人:re****.1 文档编号:569518247 上传时间:2024-07-30 格式:PPT 页数:35 大小:870.50KB
返回 下载 相关 举报
C程序设计:C语言第十三次课_第1页
第1页 / 共35页
C程序设计:C语言第十三次课_第2页
第2页 / 共35页
C程序设计:C语言第十三次课_第3页
第3页 / 共35页
C程序设计:C语言第十三次课_第4页
第4页 / 共35页
C程序设计:C语言第十三次课_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C程序设计:C语言第十三次课》由会员分享,可在线阅读,更多相关《C程序设计:C语言第十三次课(35页珍藏版)》请在金锄头文库上搜索。

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分配保存一个指针值的内存区分配保存一个指针值的内存区(2字节字节);

3、而给而给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+=7; while

4、(*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+1)int a3

5、4;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 a34;行指针行指针14表示形式表示形式含义含义地址地址a数组第

7、数组第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; int *p; for(p=a0;pa0+6;p+) if(p-a0)%3

8、=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是是行指针行指针a00a01a10a11a02a12pp+1一维数组指针变量一维数组指针变量维数维数和和二维数组

9、的二维数组的列数列数必须相同必须相同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; a00a01a10a11a02a12pp12345620二维数组名是一个二维数组名是一个地址常量地址常量p=a+i 使使p指向二维数组的第指向二维数组的第i行行*(*(p+i)+j) aij 二维数组

10、形参实际上是一维数组指针变量二维数组形参实际上是一维数组指针变量 即即 int p 10 int (*p)10系统给系统给p分配能保存一个指针值的内存区分配能保存一个指针值的内存区 (2字节字节);而给;而给a分配分配2*5*10字节的内存区字节的内存区int a510 与与 int (*p)10;小小 结结21赋值与初始化:赋值与初始化:指针数组指针数组定义:定义:数组中的元素为指针变量数组中的元素为指针变量形式:形式:数据类型数据类型 *数组名数组名数组长度数组长度;例子:例子:int *p4;#include stdio.hvoid main() int b23; int *p =b0,

11、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#include stdio.hvoid main() char a=Fortran,

12、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;g a i n 0a0a1a2mu c h 0s t r o n g 0指针

13、数组指针数组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(i=0;iSIZE-1;i+) P140 k=i; for(j=i+1;j0

14、) k=j; if(k!=i) temp=coursei; coursei=coursek; coursek=temp; 28 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量例:例:p=max;29 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p

15、)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量调用调用: 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)(); scanf(%d,%d,&a,&b); process(a,b,max);

16、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(x+y);31例子:例子:char *pp, *p, ch=A; p=&ch; pp=&p;

17、概念:概念:指向指针的指针指向指针的指针 &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)+0), *(coursei+0) coursei指向的字符串指向的字符串的首地址的首地址(行地址行地址) coursei指向的字符串指向的字符串中的第中的第0列字符的地址列字符的地址 coursei指向的字符串指向的字符串中的第中的第0列字符的值列字符的值 34例:例:char *ps =abc, 123 ,*pp=ps; 则则: printf(%s,*pp)的值为?的值为?printf(%s,*(pp+1)的值为?的值为?printf(%c,*(*(pp+1)+2)的值为?的值为?多级指针多级指针abc1233a b c 0ps0ps11 2 3 0pp35结结 束束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号