




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.const最经常的用法1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.2.const可以用来创建数组常量、指针常量、指向常量的指针等7.头文件中的 ifndef/define/endif 干什么用?预处理答:防止头文件被重复引用8. switch()中不允许的数据类型是?答:实型注意;switch 后面的表达式不能跟double,float,long,String ,boolean 可以接int,short,byte,char!9.编写strcat函数(6分)已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C+/C 的字符串库函数,请编写函数 strcat答:VC源码:char * _cdecl strcat (char * dst, const char * src)char * cp = dst;while( *cp )cp+; /* find end of dst */while( *cp+ = *src+ ) ; /* Copy src to end of dst */return( dst ); /* return dst */(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?答:方便赋值给其他变量10.回答下面的问题(6分)(1).Void GetMemory(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);请问运行Test 函数会有什么样的结果?答:输出“hello”(2). void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);请问运行Test 函数会有什么样的结果?答:输出“world”(3).char *GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);请问运行Test 函数会有什么样的结果?答:无效的指针,输出不确定12.C+中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理堆: 程序运行时动态申请,new 和malloc申请的内存就在堆上15.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。18.Heap与stack的差别。Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C+中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行1,malloc与free是C+/C语言的标准库函数,new/delete是C+的运算符。它们都可用于申请动态内存和释放内存2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 3,因此C+语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。4,C+程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。19.用宏定义写出swap(x,y) /如果把较长的宏定义分成干行,须在待续的行末尾加上#define swap(x,y) x=x+y;y=x-y;x=x-y注意:结尾没有;20一个指针为4个字节int *p;printf(%d,sizeof(p);/输出: 4void Func(char str100)printf(%d, sizeof(str);答:4分析:指针长度一个32位的机器,该机器的指针是多少位指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。char* ss = 0123456789;sizeof(ss) 结果 4 ss是指向字符串常量的字符指针sizeof(*ss) 结果 1 *ss是第一个字符char ss = 0123456789;sizeof(ss) 结果 11 ss是数组,计算到0位置,因此是101sizeof(*ss) 结果 1 *ss是第一个字符char ss100 = 0123456789;sizeof(ss) 结果是100 ss表示在内存中的大小 1001strlen(ss) 结果是10 strlen是个函数内部实现是用一个循环计算到0为止之前int ss100 = 0123456789;sizeof(ss) 结果 400 ss表示再内存中的大小 1004strlen(ss) 错误 strlen的参数只能是char* 且必须是以0结尾的char q=abc;char p=an;sizeof(q),sizeof(p),strlen(q),strlen(p);结果是 4 3 3 2 27.在不用第三方参数的情况下,交换两个参数的值#include void main() int i=60; int j=50; i=i+j; j=i-j; i=i-j; printf(i=%d,i); printf(j=%d,j);方法二:i=j;j=i;i=j;方法三:/ 用加减实现,而且不会溢出a = a+b-(b=a)28.假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?答:2次就可以了,方法:将其分成3堆,分别是3个、3个、2个。第一次天平两边各放3个,会有两种情况,一、两边持平一样重,那较重的球则不在里面,那就把剩下的两个称一下就能找到较重那个了。第二种情况是有一边较重,那较重的球就在较重那边的3个之中,第二次称就是就在这3个之中拿出两个来比较,也有两种情况,持平则较重的是没放进去称的那个,有一边较重则那个就是较重的。(2).include 和 include “filename.h” 有什么区别?答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。(3).在C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?答:函数和变量被C+编译后在符号库中的名字与C语言的不同,被extern C修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C+程序不能直接调用C 函数。C+提供了一个C 连接交换指定符号extern“C”来解决这个问题。6.MFC中CString是类型安全类么?答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换7.C+中为什么用模板类。答:(1)可用来创建动态增长和减小的数据结构(2)它是类型无关的,因此具有很高的可复用性。(3)它在编译时而不是运行时检查数据类型,保证了类型安全(4)它是平台无关的,可移植性(5)可用于基本数据类型15函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。16一般数据库若出现日志满了,会出现什么情况,是否还能使用?答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。17 SQL Server是否支持行级锁,有什么好处?答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。22.TCP/IP 建立连接的过程?(3-way shake)答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。10.Internet采用哪种网络协议?该协议的主要层次结构? Tcp/Ip协议。主要层次结构为: 应用层/传输控制层/网络互连层/网络接口层。11.Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議)12.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。3、全局变量可不可以定义在可被多个C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态数据区 )中,动态申请数据存在于( 堆)中。7、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”1、includestring.h2、main()3、4、 char*src=hello,world;5、 char* dest=NULL;6、 int len=strlen(src);7、 dest=(char*)malloc(len);8、 char* d=dest;9、 char* s=srclen;10、 while(len-!=0) 11、 d+=s-;12、 printf(%s,dest);13、 return 0;14、 答:方法1:int main()char* src = hello,world;int len = strlen(src);char* dest = (char*)malloc(len+1);/要为0分配一个空间char* d = dest;char* s = &srclen-1;/指向最后一个字符while( len- != 0 )*d+=*s-;*d = 0;/尾部要加0printf(%s,dest);free(dest);/ 使用完,应当释放空间,以免造成内存汇泄露return 0;方法2:i nclude i nclude main()char str=hello,world;int len=strlen(str);char t;for(int i=0; ilen/2; i+)t=str; str=strlen-i-1; strlen-i-1=t;printf(%s,str);return 0;2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C+中应用什么实现?c用宏定义,c+用inline7.确定模块的功能和模块的接口是在软件设计的那个队段完成的?概要设计阶段1进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。什么是预编译?何时需要预编译:、总是使用不经常改动的大型代码体。、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。char * const p;char const * pconst char *p上述三个有什么区别?char * const p; /常量指针,p的值不可以修改char const * p;/指向常量的指针,指向的常量值不可以改const char *p; /和char const *pchar str1 = abc;char str2 = abc;const char str3 = abc;const char str4 = abc;const char *str5 = abc;const char *str6 = abc;char *str7 = abc;char *str8 = abc;cout ( str1 = str2 ) endl;cout ( str3 = str4 ) endl;cout ( str5 = str6 ) endl;cout ( str7 = str8 ) endl;结果是:0 0 1 1解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。3.c和c+中的struct有什么不同?c和c+中struct的主要区别是c中的struct不可以含有成员函数,而c+中的struct可以。c+中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private6.列举几种进程的同步机制,并比较其优缺点。原子操作、信号量机制、自旋锁、管程,会合,分布式系统7.进程之间通信的途径共享存储系统消息传递系统管道:以文件系统为基础11.进程死锁的原因资源竞争及进程推进顺序非法12.死锁的4个必要条件互斥、请求保持、不可剥夺、环路13.死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁15.操作系统中进程调度策略有哪几种?FCFS(先来先服务),优先级,时间片轮转,多级反馈8.类的静态成员和非静态成员有何区别?类的静态成员每个类只有一个,非静态成员每个对象一个9.纯虚函数如何定义?使用时应注意什么?virtual void f()=0;是接口,子类必须要实现10.数组和链表的区别数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变12.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?应用层表示层会话层运输层网络层物理链路层物理层tcp /udp属于运输层TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好udp: 不提供稳定的服务,包头小,开销小 A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。他们都放在数据区,但是编译器对他们的命名是不同的。如果要使变量在其他模块也有意义的话,需要使用extern关键字。4.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值 (2) 不存在引用,引用必须与合法的存储单元关联;而指针则可以是NULL.(3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象给引用赋值并不是改变它和原始对象的绑定关系 (4) 引用的创建和销毁并不会调用类的拷贝构造函数 (5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。const 指针仍然存在空指针,并且有可能产生野指针.总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。8.什么时候需要“引用”? 流操作符、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。6.含参数的宏与函数的优缺点 宏: 优点:在预处理阶段完成,不占用编译时间,同时,省去了函数调用的开销,运行效率高 缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得出错误的结果。函数: 优点:没有带参数宏可能导致的副作用,进行类型检查,计算的正确性更有保证。缺点:函数调用需要参数、返回地址等的入栈、出栈开销,效率没有带参数宏高 PS:宏与内联函数的区别 内联函数和宏都是在程序出现的地方展开,内联函数不是通过函数调用实现的,是在调用该函数的程序处将它展开(在编译期间完成的);宏同样是; 不同的是:内联函数可以在编译期间完成诸如类型检测,语句是否正确等编译功能;宏就不具有这样的功能,而且宏展开的时间和内联函数也是不同的(在运行期间展开) 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。25. main 函数执行以前,还会执行什么代码?答案:全局对象的构造函数会在main 函数之前执行。26. 描述内存分配方式以及它们的区别?1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业承包合同下新增厨师补充协议范文8篇
- 压力真空罐安全培训流程课件
- 2025年区块链行业区块链技术应用前景与金融改革研究报告
- 2025年物联网行业物联网技术应用前景研究报告
- 2025年火箭航天行业商业化前景预测报告
- 2025年环保行业绿色环保产品市场前景研究报告
- 2025年虚拟现实行业VR技术与虚拟现实应用前景研究报告
- 商品车电器使用培训课件
- 商品混凝土安全技术培训课件
- 2025重庆建峰工业集团有限公司招聘77人笔试参考题库附带答案详解
- 股权代持协议(模板)8篇
- 《AI创意课件之设计》课件
- 医院会计笔试题目及答案
- 河南豫信电科所属公司招聘笔试题库2025
- GB/T 45345-2025金属及其他无机覆盖层工程用直流磁控溅射银镀层镀层附着力的测量
- 无人机教员聘用协议书
- 药物非临床研究质量管理规范
- 脑科生理病理图谱解读
- 全国青少年科技辅导员专业水平认证笔试考题
- (行业)常用表面处理工艺详解(行业讲座教学培训课件)
- 配电网安健环设施标准
评论
0/150
提交评论