书签 分享 收藏 举报 版权申诉 / 20
上传文档赚钱

类型指针是C语言中的一个重要的概念课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4681549
  • 上传时间:2022-12-31
  • 格式:PPT
  • 页数:20
  • 大小:104.38KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《指针是C语言中的一个重要的概念课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    指针 语言 中的 一个 重要 概念 课件
    资源描述:

    1、第十章第十章 指针指针指针是指针是C C语言中的一个重要的概念,也是语言中的一个重要的概念,也是c c语言的语言的一个重要特色。正确而灵活地运用它,可以有效地一个重要特色。正确而灵活地运用它,可以有效地表示复杂的数据结构;能方便地使用字符串;有效表示复杂的数据结构;能方便地使用字符串;有效而方便地使用数组;在调用函数时能得到多个的值;而方便地使用数组;在调用函数时能得到多个的值;能直接处理内存地址等,这对设计系统软件是很必能直接处理内存地址等,这对设计系统软件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、要的。掌握指针的应用,可以使程序简洁、紧凑、高效。每一个学习和使用高效。每一个学习和使

    2、用C C语言的人,都应当深入地语言的人,都应当深入地学习和掌握指针。可以说,学习和掌握指针。可以说,不掌握指针就不掌握不掌握指针就不掌握C C语语言的精华言的精华。重点:重点:1 1、指针的概念;、指针的概念;2 2、指针变量的概念;、指针变量的概念;3 3、指针变量的定义及引用;、指针变量的定义及引用;4 4、指针变量作为函数的参数;、指针变量作为函数的参数;难点:难点:指针变量作为函数的参数指针变量作为函数的参数10.1 10.1 指针的概念指针的概念一、内存的访问方式一、内存的访问方式1 1、直接访问直接访问(通过变量名对内存单元进(通过变量名对内存单元进行存取操作。)行存取操作。)20

    3、0020022004ijk 3 6 9 :内存用户数据区:如:如:i=2,j=6,k=9 i=2,j=6,k=9 printf(“%d”,i);printf(“%d”,i);该输出语句是这样执行的该输出语句是这样执行的:根据变量名与地址的对应关系(该关系在根据变量名与地址的对应关系(该关系在编译时确定),找到变量的地址编译时确定),找到变量的地址20002000,然,然后将从后将从20002000开始的两个字节的内容(即开始的两个字节的内容(即3 3)取出后输出。取出后输出。10.1 10.1 指针的概念指针的概念2000200220043010ijki_p 3 6 92000 :内存用户数据

    4、区:2 2、间接访问间接访问将变量将变量 i i的地址存放在另一个变量中。的地址存放在另一个变量中。假设变量假设变量i_pi_p用来存放整型变量的地址,用来存放整型变量的地址,它被分配它被分配30103010、30113011两个字节,可用下例两个字节,可用下例语句将语句将i i的地址存放到的地址存放到i_pi_p中。中。i_p=&i i_p=&i;即;即i-pi-p中的的值为中的的值为20002000此时,要存取变量的值,可以先找到此时,要存取变量的值,可以先找到存放存放“i”“i”地址的变量地址的变量i_pi_p,从中取出,从中取出i i的的地址(地址(20002000),然后到),然后到

    5、20002000,20012001字节取字节取出出i i的值的值3 3。两个概念:两个概念:(1 1)指针)指针即地址即地址 一个变量的地址称为该变量的指针一个变量的地址称为该变量的指针。通过。通过变量的指针能够找到该变量。变量的指针能够找到该变量。(2 2)指针变量)指针变量专门用于存储其它变量专门用于存储其它变量地址的变量地址的变量指针变量指针变量i_pi_p的值就是变量的值就是变量i i的地址。的地址。10.1 10.1 指针的概念指针的概念变量的变量的指针指针就是变量的地址,就是变量的地址,存放变量地址的变量就是存放变量地址的变量就是指针变量指针变量。为表示指针变量和它指向的变量之为表

    6、示指针变量和它指向的变量之间的关系,用间的关系,用指针运算符指针运算符“*”表表示。示。即即:*(i_pi_p)就是)就是i_pi_p所指向的所指向的变量。变量。10.2 10.2 变量的变量的指针指针和指向变量的和指向变量的指针变量指针变量20003i_p*(i_p)i因此,下面两个语句的作用相同:因此,下面两个语句的作用相同:i=3;i=3;/*将将3 3直接赋给变量直接赋给变量i i*/i_p=&i;/i_p=&i;/*使使i_pi_p指向指向i i*/*i_p=3;/i_p=3;/*将将3 3赋给指针变量赋给指针变量i_pi_p所指向的变量所指向的变量*/10.2 变量的变量的指针指针

    7、和指向变量的和指向变量的指针变量指针变量1 1、指针变量的定义、指针变量的定义一般形式:一般形式:类型标识符类型标识符 *变量名变量名如:如:int int *p1;char p1;char *p2;float p2;float *p3;p3;说明:说明:*表示该变量为指针型变量,指针变量名为表示该变量为指针型变量,指针变量名为p1,p2,p3p1,p2,p31.1.定义指针变量时必须指定基类型。它表示指针定义指针变量时必须指定基类型。它表示指针变量中存放的地址所指向的是什么类型的数据。变量中存放的地址所指向的是什么类型的数据。u给指针变量赋值:给指针变量赋值:如:如:p1=&i p1=&i(

    8、将(将i i的地址赋给的地址赋给p1p1)注:一般不直接赋数值注:一般不直接赋数值2 2、指针变量的引用、指针变量的引用用指针变量对变量赋值:用指针变量对变量赋值:如:如:int i,j,int i,j,*p;p;p=&i;p=&i;*p=3;j=p=3;j=*p+2;p+2;注意:注意:p p是地址变量,而是地址变量,而*p p 是非地址变量,与是非地址变量,与i i是一回事。是一回事。“*”:为指针运算符或叫指向运算符、间接运算符。:为指针运算符或叫指向运算符、间接运算符。定义后定义后p=&I后后*p=3后后Ijp:100010021004Ijp100010021004Ijp1000100

    9、21004Ijp1000 31000100010021004j=*p+2 后后 3 51000例例10.1 通过指针变量访问整型变量通过指针变量访问整型变量 main()int a,b;int *pointer_1,*pointer_2;a100;b=10;pointer_1&a;*把变量把变量a的地址赋给的地址赋给pointer_1*pointer_2=&b;*把变量把变量b的地址赋给的地址赋给pointer_2*printf (”d,dn”,a,b);printf(”d,dn”,*pointer_1,*pointer_2);*pointer_1=&a对吗?对吗?运行结果为:运行结果为:10

    10、0,10 100,10 100,10 100,10关于运算符关于运算符&和和 *的几点说明:的几点说明:(1 1)结合性)结合性&和和*两运算符的优先级相同,但结合方向为两运算符的优先级相同,但结合方向为自右向左自右向左如:如:int a,b,int a,b,*p1,p1,*p2;p2;p1=&a;p2=&b;p1=&a;p2=&b;&*p1p1的含义?的含义?&*p1p1相当于相当于&(&(*p1)p1),等于等于&(&(*p1)=&(a)=&a=p1p1)=&(a)=&a=p1*&a&a的含义?的含义?*&a&a相当于相当于*(&a)=(&a)=*(p1)=a(p1)=a(2 2)优先级)

    11、优先级 处于第二位处于第二位(见附录见附录)(3)(3)自增自减运算自增自减运算如:如:int a,b,int a,b,*p;p;p=&a;a=3;b=5;p=&a;a=3;b=5;(*p)+p)+:相当于相当于 a+a+,a=4a=4*p+p+:相当于相当于*(p+)(p+),先求先求*P P的值(为的值(为3 3),然),然后后P P再再+,若,若p p原为原为1000,1000,则则p+p+为为10021002,即,即P P不再不再指向指向a a了。了。若若float a,float a,*p;p;p=&a;p=&a;当当p p为为1000,1000,则则p+p+为为10041004例例

    12、10.2 10.2 输入输入a a和和b b两个整数,按先大后小的顺序输出两个整数,按先大后小的顺序输出a a和和b b。main ()int*p1,*p2,*p,a,b;scanf (d,d“,&a,&b););p1=&al;p2=&b;if (ab)p=p1;pl=p2;p2=p;printf (na=d,b=dn”,a,b););printf(max=d,min=dn“,*pl,*p2););运行情况如下:运行情况如下:输入输入 5 5,9 9 回车,输出结果?回车,输出结果?a5,b9max9,min5交换地址(指针变量),使交换地址(指针变量),使p1p1指向大数指向大数b b,而变

    13、量,而变量a a、b b未变。未变。&a&b59&b5&a9 p1 a p2 bppp1 ap2 b3 3、指针变量作为函数参数、指针变量作为函数参数功能:将一个变量的地址传送到另一函数中,实参和形参功能:将一个变量的地址传送到另一函数中,实参和形参均用指针。均用指针。例例10103 3 即对输入的两个整数按大小顺序输出(用函数处即对输入的两个整数按大小顺序输出(用函数处理)。理)。运行情况如下:运行情况如下:输入:输入:5 5,9 9 回车回车 输出:输出:9 9,5 5void swap(int *p1,*p2)int p;p=*p1;*p1=*p2;*p2=p;void main()()

    14、int a,b;int *pointer_1,*pointer_2;scanf(d,&a,&b);pointer_1&a;pointer_2b;if(ab)swap (pointer_1,pointer_2););printf (nd,dna,b););函数调用过程下面例子能不能正确交换数据?下面例子能不能正确交换数据?void swap (pl,p2)int *p1,*p2;int*p;ppl;p1=p2;p2p;void main()()int a,b;int *pointer_1,*pointer_2;scanf (”dd,&a,b);pointer_l=&a;pointer_2=b;i

    15、f(ab)swap(pointer_ l ,pointer_2););printf(”nd,dn”,*pointer_1,*pointer_2););出错的原因是参量不是双向传递。出错的原因是参量不是双向传递。&a&b59&a&b59&b5&b5&a9&a9Pointer_1 a p1 a p1 a pointer_1 a pointer_2 b p2 b p2 b pointer_2 b (a)(b)(c)(d)&a&b如果想通过函数调用得到如果想通过函数调用得到n n个要改变的值,可以个要改变的值,可以用如下方法:用如下方法:在主调函数中设在主调函数中设n n个变量,用个变量,用n n个指

    16、针变量指向个指针变量指向他们;他们;然后然后将指针变量作实参将指针变量作实参,将这,将这n n个变量的地址传个变量的地址传给所调用的函数的形参给所调用的函数的形参 通过形参指针变量,改变通过形参指针变量,改变该该n n个变量的值个变量的值;主调函数中就可以使用这些改变了值的变量。主调函数中就可以使用这些改变了值的变量。例例10104 4 输入输入a a、b b、c c三个整数,按大小顺序输出。(三个整数,按大小顺序输出。(P228P228)swap (int *pt1,int *pt2)int p;p=*pt1;*pt1=*pt2;*pt2=p;exchange (int *q1,int *q2,int *q3)if(*q1*q2)swap(q1,q2);if(*q1*q3)swap(q1,q3);if(*q2*q3)swap(q2,q3);运行情况如下:运行情况如下:输入:输入:9 9,0 0,10 10 回车回车输出:输出:1010,9 9,0 0main()int a,b,c,*p1,*p2,*p3;scanf(%d%d%d,&a,&b,&c);p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);printf(n%d,%d,%dn,a,b,c);

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:指针是C语言中的一个重要的概念课件.ppt
    链接地址:https://www.163wenku.com/p-4681549.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库