软件技术基础之指针和结构体课件.ppt
《软件技术基础之指针和结构体课件.ppt》由会员分享,可在线阅读,更多相关《软件技术基础之指针和结构体课件.ppt(50页珍藏版)》请在三一办公上搜索。
1、软件技术基础,教材:软件技术基础,黄迪明,电子科大出版社参考书目:数据结构(C语言),严蔚敏,清华大学出版社计算机操作系统,汤子瀛,西安电子科技大学软件工程导论,张海藩,清华大学出版社,软件技术基础,数据结构操作系统软件工程数据库技术网络技术,教学内容,任课教师:黄际彦,联系方式:电话:13880555286 邮箱:,数据结构 操作系统 软件工程,一、前言,硬、软件设计协同设计技术已经成为当前系统设计的一个重要发展趋势。本课程简要介绍了计算机软件设计的一些重要概念,软件技术的基本技术和方法,奠定学生在软件设计方面的坚实基础。,1、目的,2、主要内容,现代电子系统由硬件和软件组成 CPU:控制器
2、、运算器;硬 存储器:内(RAM,ROM)件 外(硬 盘,软盘,光盘等)IO设备:键盘,鼠标和显示器,打印机 传感器:温度、速度、位置等 系统软件:操作系统、语言处理程序、软 工具软件 件 应用软件:面向各种问题的应用程序,现代电子系统,计算机软件是由计算机程序、程序所使用的数据以及相关文档组成的集合。程序是使计算机执行特定任务的指令序列。通常情况下,用各种程序设计语言编写的程序称为源程序,它必须经过语言加工程序将其翻译成用机器代码表示的目标程序才被计算机执行。程序使用的数据是指程序操作的对象。通常以数组,数据文件等形式表示。文档是用自然语言编写的用来描述程序的内容、功能、设计过程以及使用方法
3、的资料。包括设计文档和使用文档。,软件的定义:,数据结构,数据结构:计算机系统中数据的组织形式及其相互关系。数据:客观事物采用计算机进行识别、储存和加工所进行的描述。结构:事物间的相互关系和约束。表现为计算机系统中数据的存储方式。目的:提高计算机的运算效率和合理使用储存空间。计算机能处理的的基本元素就是数据,在软件设计的过程中不仅要考虑数据本身的性质,还要着重考虑数据的存储结构以及相应的操作,使得非数字计算领域问题的解决有了一个良好的理论基础。由于计算机技术的飞速发展,计算机的应用领域的重心从数字计算转移到非数字计算,因此数据结构不仅是一般程序设计的基础,而且是设计实现编译程序、操作系统、数据
4、库系统和大型应用程序的基础。,操作系统,操作系统 操作系统是计算机硬件和其它软件的接口,同时它也是计算机系统的控制和管理中心。DOS、UNIX、WINDOWS、LINUX等都是常用的操作系统。作用:1、提供用户与计算机硬件的接口2、有效控制和管理计算机的软硬件资源3、合理的调度计算机的资源,改善计算机的性能,软件的生产(编写)在早期由于软件的规模小,复杂度低,采用“手工作业”、“软件作坊”的方式足以胜任。而现代软件产品的规模庞大,其复杂度难以估量,必须有一种新的工程化的科学方法来指导软件的生产,在这种背景下产生了软件工程这一门学科,它是每一个软件工程师所必备的知识。,软件工程,课 堂 测 验,
5、一、填空,#include main()int digit_num=0,letter_num=0,int other_num=0;char ch;while(1)ch=getchar();if(ch=!)break;if(ch=0,若键盘输入:123abdh#234DFG%34&hHJk+!_ADD!此程序运行的结果为:,8,11,5。,C语言回顾,C语言特点:1.C是中级语言 它把高级语言的基本结构和语句与低级语言的实用性结合起来。2.C是结构式语言 以函数形式提供给用户的。3.C语言功能齐全 C 语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。4.C语言适用范围大 C 语言
6、还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。,/*Example of c*/包含文件说明#include/子函数说明void vSubfunction(char*cpTemp);Main()/主函数定义/定义局部变量 char cTemp=“call sub-function!”;/调用子函数 vSubfunction(cTemp);/字函数定义void vSubfunction(char*cpTemp)printf(cpTemp);,1、包含文件(一组#include语句)、用户 函数说明部分、全程变量定义、主函数和若干子函数组成。在主函数和子函数中 又
7、包括局部变量定义、若干个库函数、控制流程语句、用户函数的调用 语句等;2、大多数语句结尾必须要用“;”作为终止符。3、有且只有一个主函数。4、使用/*/和/进行注释。5、每个程序必须用一对花括号“”和“”括起来。,1、条件语句if(表达式)语句体1;else语句体2;2、循环语句for(;)语句;while(条件)语句;do 语句;while(条件);,控制流程语句,3、开关语句 switch(变量)case 常量1:语句1或空;case 常量2:语句2或空;default:语句n+1或空;4、break、continue和goto语句,C语言回顾 指针,1、内存:由存储单元组成。其特点为存储
8、单元是线性连续的。存储单元的最小单位是 字节。,2、内存地址:正如我们的住房都有门牌号码一样,为了访问内存中的某个存储单元,我们也要为它编号,这种编号称为内存地址。利用内存地址我们可以访问该地址标识的存储单元。,一、指针的相关基本概念:,Byte,3、程序中一旦定义了一个变量,该变量在内存中就将占用一定的存储单元。变量占用的存储单元总是n(n0)个连续的字节,开始字节的地址,就是变量的地址也可称为该存储单元的首地址。,二、指针的基本概念:,指针就是变量的地址。与此对应,在C语言中使用一类专门的变量即指针变量来存放变量的地址。因此,指针变量是存放地址数据的变量。,从右图可知,指针变量和一般变量一
9、样,仅仅是变量的内容为变量地址的变量而已。,指针变量pi,变量i,变量值,变量地址(指针),变量地址存入指针变量,指向,这里变量和指针变量的类型必须一致。,一般而言,指针变量只能存放某一种数据类型的变量的地址,由此可将指针变量分为:整型指针变量、实型指针变量和字符型指针变量等等,指针变量的类型表明了其指向的存储单元中存放的数据的类型。,当把变量的地址存入指针变量后,我们就认为 这个指针指向了该变量。,指针的定义方式如下:数据类型名*指针变量名;,在定义指针时要注意以下几个问题:,int*ptr1,*ptr2;,三、指针变量的定义:,1 变量前面的“*”不能省略,如果写成:,则表示 ptr2 被
10、定义为整型变量而非整型指针变量。,int*ptr1,ptr2;,2 定义中的“*”表示所定义的变量是指针变量,但 指针变量名为ptr1、ptr2而非*ptr1、*ptr2。,3 指针变量只能指向定义时所规定类型的变量。如 ptr1、ptr2只能指向整型变量而不能指向实型或 字符型变量。,4 定义指针变量后,并未确定该变量指向何处。即是 说该变量的值是不确定的,在引用该指针变量前,必须先让它指向一个变量或在内存中为其分配一个 相应的存储单元。,5 不建议用一个整数给一个指针变量赋初值,如int*pi=2000;原意将地址2000作为指针变量pi的初值,某些编译系统可能能通过上述编译,但是作为编程
11、者很难知道2000地址里面的数据到底是什么。正确做法:int i;int*pi=,四、指针的“&”、“*”和赋值运算:,取地址运算符&的作用是取变量的地址。如:&i 表示求变量 i 的地址。,引用运算符*的作用是取指针指向变量的内容。如:*ptr 表示求指针 ptr 所指向变量的内容。,1、&取地址运算和*引用运算,&运算和*运算是一对逆运算。,若已执行point_1=&a,则(1)&*point_1?(2)*&a?,先对变量 i 作取地址运算,其地址值赋给 point,point指针就已指向变量 i,*point的值为3。给*point 赋值相当于给 i 赋值。,main()int i=3;
12、int*point;point=,2、指针的赋值运算,指针的赋值运算可以是以下两种方式:把地址的值赋给指针变量;把一个指针的值赋给另一个指针。,注意:指针的值为空时,C语言中常用一符号常量 NULL给其赋值。,main()float flt;float*f_ptr=.,下面我们来看一个和“&”“*”和指针赋值语句相关的例子,数组在内存中占用连续的存储单元。指针最常见的一种用途就是指向数组元素。当一个指针指向数组元素后,就可以用它灵活、快速地处理数组元素,从而体现出指针的优势。,main()int*ptr1,*ptr2,*ptr3;int ary5=2,4,8,16,32;ptr1=,五、指针和
13、数组:,(一)、指针和一维数组,C语言中规定数组名代表数组的首地址,即第一个元素的地址。因此ptr3=ary 等价于 ptr3=&ary0;当指针指向数组的首地址时,指针可以象数组一样使用。若指针ptr指向了数组ary的首地址,就有:*(ptr+2)、ptr2、ary2、*(ary+2)这四种形式都表示了数组的第三个元素。,运行结果:*(ptr+2)=5 ptr2=5 ary2=5*(ary+2)=5,#includemain()int*ptr;int ary5=2,9,5,45,3;ptr=ary;printf(“*(ptr+2)=%dn”,*(ptr+2);printf(“ptr2)=%d
14、n”,ptr2);printf(“ary2)=%dn”,ary2);printf(“*(ary+2)=%dn”,*(ary+2);,但是,指针变量与数组名有区别:指针变量是地址变量,数组名是地址常量。即是说指针变量的内容可以在程序运行的过程中被改变,而数组名一旦被初始化,它的值就不能被改变了。,main()int*ptr,i,ary10;ptr=*i;ary=,例要求先打印一个数组中的各元素,然后逆序再打印一遍。,(二)、指针的加减运算:,、指针与整型值的加减的结果是使该指针下移或上移整型值所指定个数的存储单元后的地址。存储单元的大小就是该指针的数据类型所需的内存大小。,、指针之间不允许加运算
15、。,、指针之间的减运算的含义是计算这两个指针相差几个数据元素,其结果是一个整数,可由下式计算:,ptr1-ptr2=(ptr1的值-ptr2的值)/sizeof(指针的类型),1、指针的加减运算(+、-):指针的加减运算有两种形式一是指针与整型值的加减运算;另一种是指针与指针的减运算。,main()int*ptr1,*ptr2,x;int ary5=2,4,6,8,10;ptr1=ary;ptr2=ptr1+3;x=ptr2-ptr1;,2、指针的自加减运算(+、-、+=、-=):+和+=运算是将指针下移一个或几个存储单元;-和-=运算是将指针上移一个或几个存储单元。,main()int*pt
16、r;int ary5=2,4,6,8,10;ptr=ary;ptr+=3;ptr-;ptr-=2;ptr+;,如果先使得指针p指向数组a的首元素(即p=a),则:(1)p+(或者p+=1)之后*p 指向的是a1的值;(2)*p+等同于*(p+),若让b=*p+,则结果为b=a0,p=a+1;(3)*(+p)运算顺序与*(p+)相反;(4)(*p)+,若让b=(*p)+,则b=a0;a0=a0+1;(5)*(p-),*(+p)和*(-p),几个值得注意的地方:,(三)、字符指针与字符串:,main()char string=“Hell0”;printf(“%sn”,string);,main()
17、char*string=“Hell0”;printf(“%sn”,string);,string,str,string,例:将字符串A复制为字符串B。,字符数组和字符指针的使用区别:,1、两者中存放的内容不同;,string,string,str,str,H,e,l,l,o,0,char string10;string=“Hell0!”;,char*string;string=“Hell0!”;,2、赋值的方法不同:,3、指针变量的值是可以改变的,而数组名是常量。,1、指针可以作为函数的参数,这同用数组名作为参数的用法一致:可传递大量数据;可改变参数的值。,六、指针和函数,例:用一个函数来实现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术 基础 指针 结构 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5642528.html