C语言提高讲义.doc
- 文档编号:173909
- 上传时间:2022-10-05
- 格式:DOC
- 页数:131
- 大小:2.31MB
C语言提高讲义.doc
《C语言提高讲义.doc》由会员分享,可在线阅读,更多相关《C语言提高讲义.doc(131页珍藏版)》请在冰豆网上搜索。
1.前言
企业需要能干活的人,需要能上战场的兵。
1.1技术层次
对于解决问题的解决方案有清晰的架构图,那么对于技术学习也要分清层次:
1.2接口的封装设计
//初始化网络连接句柄socket,也叫环境初始化
intsocketclient_init(void**handle);
//发送报文接口
intsocketclient_send(void*handle,unsignedchar*buf,intbuflen);
//接收报文接口
intsocketclient_recv(void*handle,unsignedchar*buf,int*buflen);
//socket环境释放
intsocketclient_destroy(void**handle);
1.3过程的封装设计
//打印函数
voidPrintArray(intarr[],intlen){
//打印
for(inti=0;i printf("%d",arr[i]); } printf("\n"); } voidMySort(intarr[],intlen){ //排序 for(inti=0;i for(intj=len-1;j>i;j--){ if(arr[j] inttemp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; } } } } voidtest(){ intarr[]={10,50,20,90,30}; intlen=sizeof(arr)/sizeof(int); PrintArray(arr,len); MySort(arr,len); PrintArray(arr,len); } 1.4战前准备 1.4.1听课要求 n专心听讲、积极思考; n遇到不懂的暂时先记下,课后再问; n建议准备一个笔记本(记录重点、走神的时间); n当堂动手运行,不动手,永远学不会; n杜绝边听边敲(如果老师讲的知识点很熟,你可以边听边敲)、杜绝犯困听课。 n如果时间允许,请课前做好预习; n从笔记、代码等资料中复习上课讲过的知识点。 尽量少回看视频,别对视频产生依赖,可以用2倍速度回看视频; n按时完成老师布置的练习,记录练习中遇到的BUG和解决方案,根据自己的理解总结学到的知识点; n初学者应该抓住重点,不要钻牛角尖遇到问题了,优先自己尝试解决,其次谷歌百度,最后再问老师; n如果时间允许,可以多去网上找对应阶段的学习资料面试题,注意作息,积极锻炼。 1.4.2资料管理 2.C语言概述 欢迎大家来到c语言的世界,c语言是一种强大的专业化的编程语言。 1.1C语言的起源 贝尔实验室的DennisRitchie在1972年开发了C,当时他正与kenThompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的。 它来自Thompson的B语言。 1.2使用C语言的理由 在过去的几十年中,c语言已成为最流行和最重要的编程语言之一。 它之所以得到发展,是因为人们尝试使用它后都喜欢它。 过去很多年中,许多人从c语言转而使用更强大的c++语言,但c有其自身的优势,仍然是一种重要的语言,而且它还是学习c++的必经之路。 n高效性。 c语言是一种高效的语言。 c表现出通常只有汇编语言才具有的精细的控制能力(汇编语言是特定cpu设计所采用的一组内部制定的助记符。 不同的cpu类型使用不同的汇编语言)。 如果愿意,您可以细调程序以获得最大的速度或最大的内存使用率。 n可移植性。 c语言是一种可移植的语言。 意味着,在一个系统上编写的c程序经过很少改动或不经过修改就可以在其他的系统上运行。 n强大的功能和灵活性。 c强大而又灵活。 比如强大灵活的UNIX操作系统便是用c编写的。 其他的语言(Perl、Python、BASIC、Pascal)的许多编译器和解释器也都是用c编写的。 结果是当你在一台Unix机器上使用Python时,最终由一个c程序负责生成最后的可执行程序。 1.3C语言标准 1.3.1K&RC 起初,C语言没有官方标准。 1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。 布莱恩·柯林汉(BrianKernighan)和丹尼斯·里奇(DennisRitchie)出版了一本书,名叫《TheCProgrammingLanguage》。 这本书被C语言开发者们称为K&R,很多年来被当作C语言的非正式的标准说明。 人们称这个版本的C语言为K&RC。 K&RC主要介绍了以下特色: 结构体(struct)类型;长整数(longint)类型;无符号整数(unsignedint)类型;把运算符=+和=-改为+=和-=。 因为=+和=-会使得编译器不知道使用者要处理i=-10还是i=-10,使得处理上产生混淆。 即使在后来ANSIC标准被提出的许多年后,K&RC仍然是许多编译器的最准要求,许多老旧的编译器仍然运行K&RC的标准。 1.3.2ANSIC/C89标准 1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。 1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定C语言标准。 1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSIX3.159-1989"ProgrammingLanguageC"。 因为这个标准是1989年通过的,所以一般简称C89标准。 有些人也简称ANSIC,因为这个标准是美国国家标准协会(ANSI)发布的。 1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC9899: 1990-Programminglanguages--C[5] 。 因为此标准是在1990年发布的,所以有些人把简称作C90标准。 不过大多数人依然称之为C89标准,因为此标准与ANSIC89标准完全等同。 1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC9899: 1990/Cor1: 1994[6] ,有些人简称为C94标准。 1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC9899: 1990/Amd1: 1995-CIntegrity[7] ,有些人简称为C95标准。 1.3.3C99标准 1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC9899: 1999-Programminglanguages--C ,简称C99标准。 这是C语言的第二个官方标准。 例如: 增加了新关键字restrict,inline,_Complex,_Imaginary,_Bool 支持longlong,longdouble_Complex,float_Complex这样的类型 支持了不定长的数组。 数组的长度就可以用变量了。 声明类型的时候呢,就用inta[*]这样的写法。 不过考虑到效率和实现,这玩意并不是一个新类型。 3.内存分区 3.1数据类型 3.1.1数据类型概念 什么是数据类型? 为什么需要数据类型? 数据类型是为了更好进行内存的管理,让编译器能确定分配多少内存。 我们现实生活中,狗是狗,鸟是鸟等等,每一种事物都有自己的类型,那么程序中使用数据类型也是来源于生活。 当我们给狗分配内存的时候,也就相当于给狗建造狗窝,给鸟分配内存的时候,也就是给鸟建造一个鸟窝,我们可以给他们各自建造一个别墅,但是会造成内存的浪费,不能很好的利用内存空间。 我们在想,如果给鸟分配内存,只需要鸟窝大小的空间就够了,如果给狗分配内存,那么也只需要狗窝大小的内存,而不是给鸟和狗都分配一座别墅,造成内存的浪费。 当我们定义一个变量,a=10,编译器如何分配内存? 计算机只是一个机器,它怎么知道用多少内存可以放得下10? 所以说,数据类型非常重要,它可以告诉编译器分配多少内存可以放得下我们的数据。 狗窝里面是狗,鸟窝里面是鸟,如果没有数据类型,你怎么知道冰箱里放得是一头大象! 数据类型基本概念: Ø类型是对数据的抽象; Ø类型相同的数据具有相同的表示形式、存储格式以及相关操作; Ø程序中所有的数据都必定属于某种数据类型; Ø数据类型可以理解为创建变量的模具: 固定大小内存的别名; 3.1.2数据类型别名 示例代码: typedefunsignedintu32; typedefstruct_PERSON{ charname[64]; intage; }Person; voidtest(){ u32val;//相当于unsignedintval; Personperson;//相当于structPERSONperson; } 3.1.3void数据类型 void字面意思是”无类型”,void*无类型指针,无类型指针可以指向任何类型的数据。 void定义变量是没有任何意义的,当你定义voida,编译器会报错。 void真正用在以下两个方面: Ø对函数返回的限定; Ø对函数参数的限定; 示例代码: //1.void修饰函数参数和函数返回 voidtest01(void){ printf("helloworld"); } //2.不能定义void类型变量 voidtest02(){ voidval;//报错 } //3.void*可以指向任何类型的数据,被称为万能指针 voidtest03(){ inta=10; void*p=NULL; p=&a; printf("a: %d\n",*(int*)p); charc='a'; p=&c; printf("c: %c\n",*(char*)p); } //4.void*常用于数据类型的封装 voidtest04(){ //void*memcpy(void*_Dst,constvoid*_Src,size_t_Size); } 3.1.4sizeof操作符 sizeof是c语言中的一个操作符,类似于++、--等等。 sizeof能够告诉我们编译器为某一特定数据或者某一个类型的数据在内存中分配空间时分配的大小,大小以字节为单位。 基本语法: sizeof(变量); sizeof变量; sizeof(类型); sizeof注意点: Øsizeof返回的占用空间大小是为这个变量开辟的大小,而不只是它用到的空间。 和现今住房的建筑面积和实用面积的概念差不多。 所以对结构体用的时候,大多情况下就得考虑字节对齐的问题了; Øsizeof返回的数据结果类型是unsignedint; Ø要注意数组名和指针变量的区别。 通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 提高 讲义