第7章指针ppt课件.ppt
《第7章指针ppt课件.ppt》由会员分享,可在线阅读,更多相关《第7章指针ppt课件.ppt(67页珍藏版)》请在三一办公上搜索。
1、第7章 指 针,C语言程序设计-第7章 指针,2,目 录,指针概念指针变量和指针运算指向数组的指针指向字符串的指针指向函数的指针返回指针值的函数指针数组和指向指针的指针,C语言程序设计-第7章 指针,3,指针(Pointer),指针表示变量等的存储地址使用指针可以获得紧凑、高效的代码使用指针也可能使程序晦涩难懂指针的使用灵活方便指针操作容易出错且难以调试指针与数组关系密切,C语言程序设计-第7章 指针,4,指针与地址,地址通过首地址和数据类型可以访问内存中某一数据数据类型决定所占用存储单元数指针就是地址和类型有关,C语言程序设计-第7章 指针,5,指针变量和指针运算,变量的指针和指针变量指针变
2、量的定义地址运算符和指针运算符指针变量的引用指针的运算,C语言程序设计-第7章 指针,6,变量的指针和指针变量,变量的指针内存中存储某个变量的存储单元的首地址指针(地址)实质上是一个整数(不是C的整型)可以通过变量的地址来间接的访问变量指针变量指针(地址)是一个数据,也可以用另一个变量来存放,即指针变量通过指针变量可以间接访问变量或内存数据,C语言程序设计-第7章 指针,7,指针变量的定义,一般形式基类型*指针变量名;说明“基类型”表示该指针指向的数据的类型可以定义基类型为空类型void的指针变量举例int*pi;char*pc1,c,*pc2;void*p;,C语言程序设计-第7章 指针,8
3、,地址运算符(Address Operator),地址运算符,C语言程序设计-第7章 指针,9,指针运算符(Indirection Operator),指针运算符*获得指针指向的内存数据又称“间接访问运算符”单目运算符,自右向左结合,优先级较高操作数为具有指针(地址)意义的值举例int i,*p=*/,C语言程序设计-第7章 指针,10,指针变量的引用,指针变量也要“先赋值,后使用”没有赋值的指针变量所存储的地址数据是不确定的,对它的引用非常危险对指针的赋值要注意类型匹配,必要时可以使用强制类型转换,但要慎重使用*p可以用于与指针p的基类型相同类型的变量可以使用的任何场合指针变量可以作为函数的
4、参数,C语言程序设计-第7章 指针,11,指针变量引用举例(07-01.C),int a,b,c,*pa,*pb,*pc;pa=/*c=34*/,C语言程序设计-第7章 指针,12,指针变量与所指变量的关系,10,20,pa,pb,a,b,int a,b;int*pa,*pb;,pa=,*pa=10;b=20;,pa=pb;,pb=,&a,&*pa,*pa,*&a,C语言程序设计-第7章 指针,13,指针变量作为函数参数,参数传递仍然遵循“单向值传递”的规则这里的传递规则是指针类型参数的值的传递作为参数的指针型实参的值不会改变但是对指针型实参所指向的内存数据所作的操作将不会随函数的返回而恢复用
5、途借助指针类型参数可以改变多个数据的值,C语言程序设计-第7章 指针,14,指针类型函数参数举例(07-02.C),void swap(int*x,int*y)int t;t=*x,*x=*y,*y=t;void main()int a=1,b=4;int*pa,*pb;pa=,&a,a,&b,pb,1,4,4,1,b,pa,&a,&b,y,x,参数传递,C语言程序设计-第7章 指针,15,指针的运算,运算类型算术运算:加、减、自增、自减关系运算:所有关系运算赋值运算:一般赋值、加赋值、减赋值上述运算在一定约束条件下才有意义(后详)变量说明p,q是同类型的指针变量n是整型变量,C语言程序设计-
6、第7章 指针,16,指针的算术运算,条件:p,q是指向同一数据集合(数组)的指针注意避免数组越界,C语言程序设计-第7章 指针,17,指针的关系运算,条件p,q是指向同一数据集合(数组)的指针运算方式p=q、pqpq:判断p所指元素是否在q所指元素之前其他运算的含义与上述类似若p,q不是指向同一数据集合的指针,则运算无意义,C语言程序设计-第7章 指针,18,指针的赋值运算,条件p,q是指向同一数据类型的指针n是整型数据有意义的赋值方式p=qp=q+n、p=q-n(要求q指向数组)p+=n、p-=n(要求p指向数组)注意避免数组越界,C语言程序设计-第7章 指针,19,指针的运算说明,指针的运
7、算还包括指针运算对指向数组的指针的下标运算对指针变量的取地址运算对指向结构体的指针的指向成员运算除上述运算方式(包括约束条件)外的其他运算都没有意义无意义的指针运算不一定会出现语法错误,但可能造成危险的操作,C语言程序设计-第7章 指针,20,指针的运算举例,short a5,*p,*q;p=,C语言程序设计-第7章 指针,21,指向数组的指针,指针与数组的关系指向数组的指针通过指针引用数组元素数组用作函数参数指向二维数组的指针,C语言程序设计-第7章 指针,22,指针与数组的关系,数组名是“常量指针”数组名表示数组的首地址,因此数组名也是一种指针(地址)数组名表示的地址(指针)不能被修改,所
8、以称之为“常量指针”数组的指针数组的起始地址与数组名表示的指针相同与数组的第一个元素(a0)的地址相同,C语言程序设计-第7章 指针,23,数组和指针的用法,数组名不能被赋值和修改,若指针指向数组,则两者的其他用法基本相同定义指针时,只分配一段用来存放地址的空间,而没有分配存放数据的空间定义数组时,为所有元素分配相应的连续的存储空间,但没有存放地址的空间指针应赋值后才能使用数组名不能被赋值,可以直接使用,C语言程序设计-第7章 指针,24,指向数组的指针,char a10,*p;p=,a,p,&a0,C语言程序设计-第7章 指针,25,通过指针引用数组元素,当一个指针变量指向数组或某个数组元素
9、时,可以通过这个指针变量引用所有的数组元素引用数组元素的方法下标运算符,例如ai、pi指针运算符*,例如*(a+i)、*(p+i)注意数组名不能被修改和赋值注意防止下标越界,C语言程序设计-第7章 指针,26,通过指针引用数组元素图示,p0,*p,*a,p,a,p+1,a+1,p1,*(p+1),*(a+1),q+i-2,p+i,a+i,pi,*(p+i),*(a+i)qi-2,*(q+i-2),p+9,a+9,p9,*(p+9),*(a+9),q,p+2,a+2,p2,*(p+2),*(a+2)q0,*q,C语言程序设计-第7章 指针,27,数组名和指针引用数组元素比较(1),指针指向数组首
10、地址前提条件:int a10,*p=a;ai、pi、*(a+i)、*(p+i)等用法都是合法的,且它们都表示同一个数组元素a+i(或p+i)不是简单的在a(或p)表示的地址值上简单的加i,而是加上i个基类型所需的地址偏移量,即加上i*sizeof(int)指针值可以改变,如p+为下一元素的地址数组名的值不能修改,如a+是非法操作,C语言程序设计-第7章 指针,28,数组名和指针引用数组元素比较(2),指针指向某个数组元素前提条件:p=a+i;*(p+)与ai+等价*(p-)与ai-等价*(+p)与a+i等价*(-p)与a-i等价注意不能使用*(a+)或a=p+i这种形式注意区分运算顺序,*(p
11、+)与(*p)+注意防止下标越界,注意掌握指针位置,C语言程序设计-第7章 指针,29,通过指针引用数组元素举例,int a10,i,*p;p=a;/*指针需要先赋值*/while(pa+10)/*指针在数组范围内移动*/scanf(%d,p+);/*指针向下移动*/p=a;/*指针指向正确位置*/for(i=0;i10;i+)printf(%d,pi);/*指针使用*/,C语言程序设计-第7章 指针,30,数组用作函数参数,数组元素用作函数实参与同类型的一般变量用法相同数组用作函数参数数组类型可以作为函数参数类型数组可以用作函数的形参和实参定义函数时,数组型形参实际上作为指针型形参处理,实参
12、可用相同类型的数组或指针声明数组类型形参时,不需要指定数组长度一般应把数组长度作为另一个参数传递,C语言程序设计-第7章 指针,31,以数组作为实参的几种方法(1),形参用数组名实参用数组名,形参用指针变量实参用数组名,f(int x,int n).main()int a10;.f(a,10);,f(int*x,int n).main()int a10;.f(a,10);,C语言程序设计-第7章 指针,32,以数组作为实参的几种方法(2),形参用数组名实参用指针变量,形参用指针变量实参用指针变量,f(int x,int n).main()int a10,*p=a;.f(p,10);,f(int
13、*x,int n).main()int a10,*p=a;.f(p,10);,C语言程序设计-第7章 指针,33,数组用作函数参数举例,选择排序法,C语言程序设计-第7章 指针,34,例1:选择排序法(07-03.C),void sort(int x,int n)/*int*x*/int i,j,k,t;for(i=0;ixk)k=j;if(k!=i)t=xi,xi=xk,xk=t;,C语言程序设计-第7章 指针,35,例1:选择排序法(续),void main()int a10,*p,i;p=a;for(i=0;i10;i+)scanf(%d,p+);p=a;sort(p,10);/*sor
14、t(a,10);*/for(p=a,i=0;i10;i+)printf(%d,*p+);,C语言程序设计-第7章 指针,36,指向二维数组的指针(1),char a34;,*a,*(a+1),*(a+2),a、a+1、a+2都是指针,它们的基类型是长度为4的字符数组,它们与下面定义的指针p同类型char(*p)4;,C语言程序设计-第7章 指针,37,指向二维数组的指针(2),a0,a1,a2,a13*(*(a+1)+3),a23*(*(a+2)+3),a03*(*a+3),char*,char,char*,基类型为char4的指针,C语言程序设计-第7章 指针,38,指向二维数组的指针总结,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 ppt 课件
链接地址:https://www.31ppt.com/p-5286272.html