C语言复习和VC6.0开发环境.ppt

上传人:牧羊曲112 文档编号:6503821 上传时间:2023-11-07 格式:PPT 页数:53 大小:1.75MB
返回 下载 相关 举报
C语言复习和VC6.0开发环境.ppt_第1页
第1页 / 共53页
C语言复习和VC6.0开发环境.ppt_第2页
第2页 / 共53页
C语言复习和VC6.0开发环境.ppt_第3页
第3页 / 共53页
C语言复习和VC6.0开发环境.ppt_第4页
第4页 / 共53页
C语言复习和VC6.0开发环境.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《C语言复习和VC6.0开发环境.ppt》由会员分享,可在线阅读,更多相关《C语言复习和VC6.0开发环境.ppt(53页珍藏版)》请在三一办公上搜索。

1、选择编程工具,目前流行两大语法体系:Basic语系和C语系。同一个语系下语言的基本语法是一样。两大语系如图3-3所示。C语系中,目前两大语言如日中天:C+和Java。C+适宜做系统软件的开发、Java更适宜做网络应用开发。C+的开发工具是VC+6.0和C+Builder6.0。Java流行的开发工具比较多,比如:IBM公司的Visual Age和Websphere Studio,Insprise公司JBuilder等等。,学习Windows下编程,学习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C+、C#、Java和汇编语言等等。虽然有很多语言,只要精通

2、一门就够了。从实用的角度来讲,C语系是较好的选择,而微软公司的Visual C+和Insprise公司(原Borland公司)的C+Builder是其相应开发工具的两大主流。,C语言发展的四个阶段,C语言经过不断的发展,在编程体系中可以将其分成四个阶段。1、面向过程的C语言。2、面向对象的C+语言(包括JAVA)。3、SDK编程。4、MFC编程(Microsoft Foundation Class:微软基类库)。,API与SDK,API是英文Application Programming Interface 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。在编程的时候可

3、以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。SDK是英文Software Development Kit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。,类C语言的介绍,1.算法描述方法;2.语法错误与代码规范问题;3.代码调试问题;4.指针与数组5.结构6.程序与进程,1.本书的算法描述,1)类C语言的风格,2)数据元素的结构定义 typedef struct/数据元素的数据项中关键字(key)的定义 EtypeKey key;/数据元素其它数据项定义;DataType data;EType;,ty

4、pedef int EtypeKey;typedef student DataType;,3)算法函数的描述,(函数形式参数表)/算法说明函数形式参数表中,以&开头的参数即为引用参数,引用参数能被函数本身更新参数值,可以作为输出数据的“管道”。,取代”return”语句,参数传递的方式:传址方式和传值方式,假设某人A要给某人B:¥2000。A将钱存放在银行帐户:XXX,并在网上银行注册。传址方式:A直接告诉B网上银行的登陆密码和支付密码,这样A、B两人拥有对同一帐户存取的权限。传值方式:假设B 也在网上银行开户:Y,A直接转帐¥2000给B(值复制)。,A-主程序,X-内存变量B-子程序,Y-

5、内存变量X,Y存放参数地址;¥2000-参数值,2000,X,A,B,2000,Y,传址方式,传值方式,X和Z代表同一内存单元;而X和Y代表不同的内存单元,void add(int,void add(int y)y=1+2;,void main()int t=0;add(t);t=?,t=0,t=3,t=3,较少一次的内存分配,示例1,4)内存空间的动态分配和释放,5)输入输出语句,算法中使用的语句基本上与C+或C语言中是一致的.,1.头文件,#include,用时称为标准方式,系统到存放C库头文件所在的目录中寻找要包含的文件。用“”时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标

6、准方式查找。,1)语法错误:变量和函数没有定义:可能是书写错误,也可能是没有把相关文件包含进来;中西文输入法的问题;的个数出现问题;如果是link过程出现问题,一般是函数定义的问题,2.语法错误与代码规范问题,只要是编译器能够识别的都是好解决的,编译出错,鼠标双击某一error信息,自动定位出错代码行,2)代码规范TAB的使用,掌握在debug方式下设置断点的检查功能,35,程序编译成功,还需要调试吗?,3.代码调试问题,35,void main()unsigned k=1;/,K=0 x41414141,所有的代码是调试出来的,而不是”编”出来的,只有经过调试的代码才能保证其可用.,设置调试

7、中的断点,调试按钮,显示当前变量值,查看自定义变量的值,单步调试,调试菜单,F10-单步调试F11-进入函数内部调试Shift+F11-从函数内部回到调用函数(如main)Ctrl+F10-运行到光标处.Shift+F5-终止调试过程.,是一个重要概念,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组;能直接处理内存地址等,这对设计系统软件是很必要的。指针的概念比较复杂,使用也比较灵活,十分小心。,4.指针,new,delete,int*parr;parr=new int100;/返回类型为 int*类型(整数型指针),分配大小为 sizeof(int)*

8、100;delete parr;,int*p;p=new int;/返回类型为int*类型(整数型指针),分配大小为 sizeof(int);delete p;,int*p;p=new int5;/分配大小为 sizeof(int)*5for(int i=0;i5;i+)*(p+i)=i;,16进制的表示方法,共计32位的2进制bit,存储一个字节,计算机存储结构,int a=3;int*p;假设已执行p=,关于&和*运算符的说明:,1、&*p与&a相同,即变量a的地址。2、*&a、*p及变量a等价。,3、(*p)+相当于a+,它与*p+不同*p+等价于*(p+),p的值改变,不再指向a了。,

9、指针仅能进行加、减算术运算如:p+n,p-n,p+,p-,+p,-p,p-=n,p+=n,p1-p2 等其中n是整数,p、p1、p2均为指针;,int i,j;j=1;i=j+;(i=1,j=2),int i,j;j=1;i=+j;(i=2,j=2),施行加法/减法运算时,指针向地址增大/减小的方向移动;移动长度取决于指针的基类型,由计算机决定;,typedef structint core;char v;stdudent;stdudent*p;p=new stdudent3;,p-core=4;p-v=a;p+;p-core=4;p-v=b;p+;p-core=4;p-v=c;,指针移动,数

10、组,char a5;for(int i=0;i5;i+)ai=a+i;,数组,int a5;int*p;p=含义:把数组的首地址赋给指针变量p。如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素(而不是简单地加1)。如果p的初值为&a0,则:p+i,a+i,&ai,即指向a数组的第i个元素。指向数组的指针变量也可以带下标,如pi与*(p+i)等价引用数组元素时,可以用:ai,*(a+i)或*(p+i),利用指针操作数组,示例2,声明结构体类型的同时定义变量typedef struct Argonchar name3;int mass;Position positionN

11、ow;Argon*next;Argon;,5.结构,15,typedef struct int x,y,z;Position;,嵌套结构,自引用结构,组成结构的成员项可以是任何数据类型。另一个结构类型的变量指向另一个结构类型的结构指针可以是指向本结构类型的一个结构指针。,它们的元素成员都必须存放在一片连续的存储空间中;通过存取结构变量的成员来访问结构变量;结构中的成员的数据类型可以不相同,而数组中的元素都是有相同的数据类型,自引用结构多用于链表,而对于数组,编译程序必须给分配存放其全部元素的存储空间。,一些特点:,嵌套结构变量的访问:,对结构体变量的成员可以像普通变量一样进行各种运算。嵌套的结

12、构指针的引用Atom*p;pqx 或(pq)x,Structure Atom.Position*q;,Argon*p;Position*q;p=new Argon;q=new Position;q-x=1;q-y=2;q-z=3;p-positionNow.x=q-x;p-positionNow.y=q-y;p-positionNow.z=q-z;p-name0=a;p-name1=b;p-mass=4;p-next=NULL;,如果没有这一行可以吗?,结尾会出现乱码(0),示例3,6.程序与进程,程序的源代码称为程序源代码,源代码编译后的二进制可执行文件称为程序。程序被运行起来后内存中和他相

13、关的内存资源和CPU 资源的总和称为进程。程序空间其实指的是进程中内存布局和内存中的数据。再通俗点就是程序被运行起来时其内存空间的布局。一个程序被编译完成后其运行时内部的内存空间布局就已经确定,int add(int x,int y)return x+y;int main(void)int result=add(129,127);printf(nresult=xin,result);return 0;,x55x8bxecx83xecx40 x53x56x57x8dx7dxc0 xb9x10 x00 x00 x00 xb8xccxccxccxccxf3xabx8bx45x08x03x45x0cx

14、5fx5ex5bx8bxe5x5dxc3,typedef int(*PF)(int,int);int main(void)unsigned char buff=x55x8bxecx83xecx40 x53x56x57x8dx7dxc0 xb9x10 x00 x00 x00 xb8xccxccxccxccxf3xabx8bx45x08x03x45x0cx5fx5ex5bx8bxe5x5dxc3;PF pf;pf=(PF),1.结构体.2.常量或全局变量(a).3.自定义函数申明及实现,进程运行,主程序mian()1.定义局部变量b.2.函数1#调用3.函数2#调用.4.结束,函数1#1.定义局部

15、变量c.2.函数调用3.返回其调用(或父)函数.,函数2#.,通过参数的传递及结果返回,调用者和被调用建立联系,1.在mian()能直接访问或修改变量a,b,c?2.函数1#能直接访问或修改变量a,b,c?,共享空间,局部空间,局部空间,Malloc,new,free,delete,函数声明(函数原型):void*malloc(int size);说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void*类型。void*表示未确定类型的指针。C,C+规定,void*类型可以强制转换为任何其它类型的指针。从函数声明上可以看出。malloc 和 new 至少有两个不同:

16、new 返回指定类型的指针,并且可以自动计算所需要大小。比如:int*p;p=new int;/返回类型为int*类型(整数型指针),分配大小为 sizeof(int);delete p;,int*parr;parr=new int100;/返回类型为 int*类型(整数型指针),分配大小为 sizeof(int)*100;delete parr;而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。int*p;p=(int*)malloc(sizeof(int);free(p);第一、malloc 函数返回的是 void*类型,如果你写成:p=malloc(siz

17、eof(int);则程序无法通过编译,报错:“不能将 void*赋值给 int*类型变量”。所以必须通过(int*)来将强制转换。,33,第二、函数的实参为 sizeof(int),用于指明一个整型数据需要的大小。如果你写成:int*p=(int*)malloc(1);代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。malloc 也可以达到 new 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小。比如想分配100个int类型的空间:int*p=(int*)malloc(sizeof(int)*100);/分配可以放得下100个整数的内存空间。,另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致。一般来说,原理是这样的,但是new and delete是C+时代产生,并不是一个简单的malloc and free的封装,若是用new 产生的对象,用 free可能发生意外,所以建议配对使用,用free它不执行析够函数.即:malloc-free new-delete,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号