分享
分享赚钱 收藏 举报 版权申诉 / 19

类型c指针操作.ppt

  • 上传人:fmgc7290
  • 文档编号:8629671
  • 上传时间:2019-07-06
  • 格式:PPT
  • 页数:19
  • 大小:214KB
  • 配套讲稿:

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

    特殊限制:

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

    关 键  词:
    c指针操作.ppt
    资源描述:

    1、第五章 第四讲 之 指向指针的指针,541 指向指针的指针过一个指针变量来存取变量的值,这种方式称为“间接存取”方式。例如:double d, *p&d; 这称为“一级间址”方式,如图517(a)所示。如果一个指针变量中存放的是另一指针变量的地址,这就需要二次“间接存取”才能存取变量的值,这称为“二级间址”,如图517(b)所示,这样的指针变量称为指向指针的指针。理论上,存在“多级间址”,实际应用中很少超过二级间址。,(a)一级间址,(b)二级间址,第五章 第四讲 之指向指针的指针,542 定义指向指针的指针变量指向指针的指针变量定义的形式为:类型名 * 指针变量名;“*指针变量名”等价于“*

    2、(*指针变量名)”,表示该指针变量的值存放的 是另个指针变量的地址,要经过两次间接存取后才能存取到变量的值。 例如语句: double * pp; 543 指向指针的指针变量的应用 1指向一个指针变量,间接存取变量的值 例514一个简单的例子说明如何通过二级间址方法存取变量的值。,第五章 第四讲 之 指向指针的指针,main( )double d123456,*p,*pp;pp&p;p&d;printf(“d83f,”,*pp);*pp+5432l;printf(”d83fn”,d);,指针变量p,变量d,3500,123.45,指向指针的指针变量pp,1500,图518,如图518所示,图中

    3、假设指针变量p的地址是1500,变量d地址是3500。此时,pp表示指针变量p的值(即变量d的地址),因此表达式*pp与变量d等价。,1500,3500,运行结果:d123456,d666666,第五章 第四讲 之 指向指针的指针,2指向指针数组,存取指针数组元素所指内容 可以把一个指针数组的首地址赋值给指向指针的指针变量。例如: 例515有三个等级分,由键盘输入1,屏幕显示“pass“,输入2显示“good”,输入3显示“excellent“。main( )int grade;char *ps ”pass”, ”good”, ”excellent” , *pp;ppps;printf(”请输

    4、入等级分(13):”);scanf(”d”,&grade);printf(“sn”,*(pp+grade-1);,运行结果:请输入等级(13):2good,第五章 第四讲 之 指向指针的指针,上述程序中pp指向指针数组ps的第一个元素ps0,pp+1则指向ps的下 一个元素 ps1,pp+2指向ps2,如图519所示。因此,即就是字符 串”pass”的首地址,*(pp+1)则是字符串”good”的首地址,*(pp+2)是字符 串”excellent”的首地址。,图519,第五章 第四讲 之 指针与结构,551 指向结构体变量的指针变量 在定义一个结构体变量时,系统将在内存中分配一块连续的存储空

    5、 间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结 构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体 变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量, 则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是:struct 类型名 * 指针变量名;,第五章 第四讲 之 指针与结构,如下面定义一个结构体类型booktp来存储书的基本信息:,struct booktpchar name60 ;char author30;float price;struct datetp unsigned year;unsigned month;pubday;,可以定义

    6、结构体变量和指向结构体变量的指针:struct booktp book5,*p;,第五章 第四讲 之 指针与结构,以上定义了p为指向结构体变量的指针变量。若p&book5;,则称 指针变量p指向结构体变量book5,此时可用下述三种方式之一存取结构 体成员(三种方式是等价的):1结构体变量名成员名2指针变量名 - 成员名3(*指针变量名)成员名 其中 “ - ” 是 指向运算符. 如有下面程序段:struct booktp *p,book5“C+Buider网络开发实例”,”清汉计算机工作室”, 53,2000,9;p&book5;则book5.price 、p-price 以及 (*p).p

    7、rice 的值都是 530,而book5.pubday.year 、p-pubday.year以及(*p).pubday.year 的值都是2000。注意此处(*p), price的圆括号不能少.指针运算符“*”作用于指针变量p上,构成 表达式(*p),等价于结构体变量名book5。,第五章 第四讲 之 指针与结构,552 指向结构体数组的指针变量 指向结构体的指针变量也可以指向结构体数组及其元素。 例如,下述程序段:struct booktp *p,book3;pbook;如图520所示,图中假定book0的地址是3000,指针变量p指向结构体数 组book的首地址,由于sizeof(str

    8、uct booktp)的值为 98,每个结构体元素 占内存空间98个字节,因此p+l指向地址3098处,p+2指向地址3196处。,图520,第五章 第四讲 之 指针与结构,使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级:1“( )”、” ”、“-”、“”四个运算符优先级相同,在C语言中具有 最高的优先级,运算的结合方向是“从左到右”;2“*”、“十十”、“一一”、“&”四个运算符优先级相同,在C语言优先 级的级别仅次于上述的四个运算符,运算的结合方向是“从右到左”。 例516通过一个简单的例子说明指向结构体数组的指针的应用。在 程序中,为了说明运算符的优先级和结合方向的用法,

    9、改变了书的价格。,main( ) struct datetpunsigned year;unsigned month; *出版日期*,第五章 第四讲 之 指针与结构,struct booktpchar name60; *书名*char author30; *作者*float price; *价格*struct datetp pubday; struct booktp *p,book3“C+Buider网络开发实例”,”清汉计算机工作室”,530,2000,9,“SQLServer循序渐进教程”,”Petkovic”,350,1999,6,“VB开发指南”,”DianneSiebold”,280

    10、,2000,9; pbook; printf(”82f,”,+p-price);*橙色表达式等价于+(p-price) *,第五章 第四讲 之 指针与结构,printf(”8.2f,”,(+p)-price); *先计算+p,p指向bookl * printf(”8.2f,”,p+ -price); *上述表达式等价于(p+)-price * printf(“8. 2fn”,p - price+); *上述表达式等价于(p-price)+ * for(pbook;pname, (*p).author, p-pubday.year,p-pubday.month,p-price); ,运行结果:5

    11、400, 3500, 3500, 2800C+-Buider网络开发实例舴者:清汉计算机工作室,出版日期:2000年9月,价格:540SQLServer循序渐进教程,作者:Petkovic,出版日期:1999年6月,价格:350VB开发指南,作者:DianneSiebold,出版日期:2000年9月,价格:290,运行程序,第五章 第四讲 之 指针与结构,553 通过指针变量存取位段数据 不能用指针变量指向位段成员,但可以用指针变量指向一个带有位段 的结构体变量可用下述三种方式之一存取结构体成员的值(三种方式是等 价的):1结构体变量名位段名2指针变量名一位段名3(*指针变量名)位段名例517

    12、通过指针变量存取位段数据。,main( ) struct packed_data unsigned a:4;unsigned b:3;unsigned c:9;*p,data9,5,60;,第五章 第四讲 之 指针与结构,p&data;printf(“u,u,un”,p-a,(*p).b,data.c);p-a+2;(*p).c 2;printf(”u,u,un”,p-a,(*p).b,data.c);运行结果:9,5,60l1,5,15 由上例知,当指针变量p指向带有位段的结构体变量data时,表达式 “p-位段名”、 “(*p)位段名” 与 “data位段名” 相互等价。,第五章第四讲 之

    13、 指向共用体的指针,561 指向共用体变量的指针变量 指针变量可以指向一个共用体变量,此时可用下述三种方式之一存取 共用体成员(三种方式是等价的):1共用体变量名共用体成员名2指针变量名一共用体成员名3(*指针变量名)共用体成员名 例518通过指针变量存取共用体成员数据。main( )struct byte_tpunsigned char a1,ah;,第五章第四讲 之 指向共用体的指针,union reg_tp unsigned ax;struct byte_tp h; union reg_tp a,* p; p&a; aax0x3b5e; printf(”axx,alx,ahxn”,p-a

    14、x,(*p).h.al,p-h.ah); p-h.a1-3; p-h.ah&=0x0f; printf(”ax=x,a1=x,ahxn”,p-ax,(*p).h.al,p-h.ah); ,运行结果:ax3b5e,a15e,ah3baxb5b,a15b,ahb,第五章第四讲 之 指向共用体的指针,上例说明了一个reg_tp共用体类型,以及定义相应的共用体变量a和指 针变量p,变量a占内存两个字节,可使用ahah对它的高字节操作, 使用aha1对它的低字节操作,使用aax对高、低两字节同时操作, 这类似于“字存取”及“字节存取”CPU寄存器上的数据,如图521 所示。 当指针变量p指向共用体变量a

    15、时,有下述等价表示关系。,图521共用体reg_tp类型,第五章第四讲 之 指向枚举的指针,562 指向枚举型的指针变量指针变量可以指向一个枚举型变量,如下定义一个枚举型变量e和指 向枚举型变量的指 针变量p:enum 枚举型类型名 e,*p;若p指向枚举型变量(即penum fruit_type fruitorange,apple,pineapple,banana,*p;char *fruit_name“苹果”,”桔子”,”香蕉”,”波萝”;for(pfruit;pfruit+4;p+)printf(“s,”,fruit_name*p);print(”n”);,第五章第四讲 之 指向枚举的指针,运行结果:桔子,苹果,波萝,香蕉,上例程序中fruit是一个枚举型数组,有四个元素,用指针变量p依次取 出fruit数组四个元素的值:orange(对应整数1)、apple(对应整数o)、 pineapple(对应整数3)、banana(对应整数2)。而fruit_name是一个指针数 组,共有四个元素,分别指向四个字符串。输出时用*p作fruit_name数组 的下标,此时系统自动把*p的枚举型(enum fruit_type类型)转换成其对应 的整型数据,如fruit_namebanana等价于fruit_name2。,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c指针操作.ppt
    链接地址:https://www.docduoduo.com/p-8629671.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开