C语言第7章指针第1讲课件.ppt
《C语言第7章指针第1讲课件.ppt》由会员分享,可在线阅读,更多相关《C语言第7章指针第1讲课件.ppt(50页珍藏版)》请在三一办公上搜索。
1、第7章 指针(一),C语言程序设计,内容提要,指针概述指针的概念为什么引入指针的概念指针变量作为函数参数字符指针作为函数参数指针和数组间的关系一维数组的地址和指针二维数组的地址和指针,为什么引入指针的概念,铁杆C/C+程序员最挚爱的武器:指针C/C+的高效、高能主要来自于指针很多不可能的任务由指针完成,为什么引入指针的概念,指针为函数提供修改变量值的手段 为C的动态内存分配系统提供支持 为动态数据结构(如例链表、队列、二叉树等)提供支持 可以改善某些子程序的效率,内存的寻址方式,如何读写内存中的数据?通过变量的地址访问变量所在的存储单元两种寻址方式直接(寻址)访问通过变量地址直接存取变量内容间
2、接(寻址)访问通过指针变量来间接存取它所指向的变量i_pointer=,指针(Pointer)的概念,指针也是一种数据类型指针变量 声明为指针类型的变量,专门存放地址数据的变量,如何定义指针变量?,定义指针变量int*p;定义了一个指针变量p,简称指针pp是变量,int*是类型指针变量初始化int*p,a;p=*p 与 a 完全等价,int i,*p;p=,int*p;float*q;p=q;,int i;float*p;p=,int*p;p=100;,判断是真?是假?,指针变量只存放地址!,一个指针变量不能指向与其类型不同的变量!,我是真的,你猜对了吗?,应在类型相同的指针变量之间赋值,&与
3、*操作符,&用来取变量的地址*用来取指针指向的内存中的内容,int*p,a10;p=,int i=3,*p;p=,指针变量与其它类型变量的对比,共性在内存中占据一定大小的存储单元先定义,后使用特殊性 它的内容只能是地址,而不能是数据必须初始化后才能使用,否则指向不确定的存储单元,对该空间进行访问,将可能造成危险可参与的运算:加、减一个整数,自增、自减、关系、赋值只能指向同一基类型的变量,指针的指向,只能指向同一基类型的变量,否则将引起warningfloat x;int*p=TC编译warning:Suspicious pointer conversion in function mainVC
4、编译warning C4133:=:incompatible types-from float*to int*,指针运算,算术运算short*p,a10;p=a;p+;/*p的值增加多少?*/指针的加减运算是以其指向的类型的字节长度为单位的,6000600160026003600460056006,指针运算,int*p,*q,a10;p=a;q=指针运算不能乱算一般只进行指针和整数的加减运算,同类型指针之间的减法运算其它运算,比如乘法、除法、浮点运算、指针之间的加法等,并无意义,所以也不支持,指针运算,关系运算指向同一种数据类型的两个指针才能进行关系运算值为1或0p q p q p=q不能与非
5、指针类型变量进行比较,但可与NULL(即0值)进行等或不等的关系运算判断p是否为空指针P=NULLp!=NULL,指针运算,赋值运算指针在使用前一定要赋值为指针变量赋的值必须是一个地址,main()int*p;scanf(%d,p);,main()int a,*p=,错!但TC下不报错VC下报错,指针与函数,指针既然是数据类型,自然可以做函数参数和返回值的类型指针做函数参数的经典例子:两数的互换,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,main()int a,b;a=15;b=8;Swap(,void Swap(int x,i
6、nt y)int temp;temp=x;x=y;y=temp;,main()int a,b;a=15;b=8;Swap(a,b);printf(a=%d,b=%d,a,b);,程序 1,程序 2,例7.17.2:编写函数实现两数的互换,实 参,形 参,结果有何不同?,Not Work!Why?,主调函数,被调函数,main()int a,b;a=15;b=8;Swap(a,b);printf(a=%d,b=%d,a,b);,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,5,5,a,b,实 参,形 参,9,9,程序 1,x,y,5,5,te
7、mp,9,主调函数,被调函数,main()int a,b;a=15;b=8;Swap(,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,&a,&a,实 参,形 参,&b,&b,程序 2,x,y,5,temp,5,a,b,9,9,5,简单变量作函数参数与指针变量作函数参数的比较,swap函数的几种错误形式(1/3),参数单向传递void Swap(int x,int y)int temp;temp=x;/*x,y为内部变量*/x=y;y=temp;,swap函数的几种错误形式(2/3),参数单向传递void Swap(int*p1,in
8、t*p2)int*p;p=p1;/*p1,p2为内部变量*/p1=p2;p2=p;,swap函数的几种错误形式(3/3),指针p没有确切地址void Swap(int*p1,int*p2)int*p;/*指针p未初始化*/*p=*p1;*p1=*p2;*p2=*p;,字符串与字符数组、字符指针,C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符串一串以0结尾的字符字符数组每个元素都是字符类型的数组char string100;字符指针指向字符类型的指针char*p;数组和指针可以等同看待,上面三者本质上是一回事,字符指针变量与字符数组的区别,定义方法不同 char
9、str10;char*ptr;赋值方法不同 char str10;str=”china”;/*错误*/strcpy(str,”china”);/*正确*/char*ptr;ptr=”china”;字符指针是变量,而数组名是地址常量,使用字符指针的注意事项,字符指针变量必须有明确的指向,否则使用是危险的例如,输入字符串时 char*a;scanf(%s,a);/*错误*/应为:char*a;char str10;a=str;scanf(%s,a);/*正确*/,例7.5:字符串拷贝用字符数组编程,void MyStrcpy(char dstStr,char srcStr)int i=0;whil
10、e(srcStri!=0)dstStri=srcStri;i+;dstStri=0;,void MyStrcpy(char*dstStr,const char*srcStr)while(*srcStr!=0)*dstStr=*srcStr;srcStr+;dstStr+;*dstStr=0;,当只允许函数访问地址内容,不允许修改时,可以把函数的指针参数定义为const,例7.5:字符串拷贝用字符指针编程,例7.5:字符串拷贝主函数程序,#include main()char a80,b80;printf(“Please enter a string:”);gets(a);MyStrcpy(b,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 讲课
链接地址:https://www.31ppt.com/p-5381182.html