面试题集_su(带答案).pdf
1717试题试题 1 1:C C 语言面试题一华为篇语言面试题一华为篇1.static 有什么用途?(请至少说明两种)1)限制变量的作用域2)设置变量的存储域(堆,主动分配内存也是堆)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外) ,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用补充:一个代码在运行时分为4 个区:1)data:全局,静态,常量2)code:代码3)堆:new,malloc 分配的内存,需要 delete,free 释放。如果不释放,则只有等程序运行正常结束时,由操作系统回收,理论上无限大。4)栈:场景信息(函数的参数,返回值,局部变量,临时变量) ,VC 的栈区默认是 4M。对大内存的操作,需要放堆区。如:Stedent stu4*1024*1024 会出问题,应改为:student *stu=new stu4*1024*1024释放:delete stu;2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在栈5.什么是平衡二叉树?左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 16.堆栈溢出一般是由什么原因导致的?堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。7.什么函数不能声明为虚函数?构造函数,静态成员函数,非成员函数,部分模板函数。8(1).冒泡排序算法的时间复杂度是什么?(其它排序算法的时间复杂度)O(n2)8(2) 、数组 aN,存放了 1 至 N-1 个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为 o(N)int do_dup(int a,int N)int sum = 0;for(int i = 0;iN;i+)sum = sum + ai;sum = sum - (N-1)*N/2;return sum;void main()int a=1,2,3,4,6,5,6;int b=do_dup(a,7);coutbendl;9.写出 float x 与“零值”比较的 if 语句。if(x-0.)10.Internet 采用哪种网络协议?该协议的主要层次结构?tcp/ip 应用层/传输层/网络层/数据链路层/物理层11.Internet 物理地址和 IP 地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析協議)18.IP 地址的编码分为哪俩部分?IP 地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。19.用户输入 M,N 值,从 1 至 N 开始顺序循环数数,每数到 M 输出该数值,直至全部输出。写出 C 程序。循环链表,用取余操作做#include #include stdlib.h#define NULL 0#define TYPE struct stu#define LEN sizeof (struct stu)struct stuint data;struct stu *next;TYPE *line(int n)int sum=1;struct stu *head,*pf,*pb;int i;for(i=0;idata=i+1;if (i=0)pf=head=pb;elsepf-next=pb;if (i=(n-1)pb-next=head;else pb-next=NULL;pf=pb;sum+;return(head);display(TYPE* L)int i;struct stu *head,*pf;pf=L;head=L;printf(%dn,pf-data);pf=pf-next;for(i=0;pf!=head;i+)printf(%dn,pf-data);pf=pf-next;main()int M,N,x,i;struct stu *p,*q;printf(please scanf M and N (MN);scanf(%d %d,&M,&N);p=line(N);display(p);x=N;while(x)for(i=1;inext;printf(p.data=%dn,p-data);/找到了M前面的1个q=p-next;printf(%dn,q-data); /输出 Mp-next = p-next-next;/释放Mp=p-next;/从M的下一个又开始数free(q) ;x-;getch();20.不能做 switch()的参数类型是:switch 的参数不能为实型。 (只能是 int char)试题试题 2 2:1.-1,2,7,28,126 请问 28 和 126 中间那个数是什么?为什么?第一题的答案应该是 43-1=63规律是 n3-1(当 n 为偶数 0,2,4) n3+1(当 n 为奇数 1,3,5)答案:632.用两个栈实现一个队列的功能?要求给出算法和思路!设 2 个栈为 A,B, 一开始均为空.入队列: 入栈 A出队列:1 如果栈 B 不为空,直接弹出栈 B 的数据。2 如果栈 B 为空,则依次弹出栈 A 的数据,放入栈 B 中,再弹出栈 B 的数据。3.在 c 语言库函数中将一个字符转换成整型的函数是 atol()吗,这个函数的原型是什么?函数名: atol功 能: 把字符串转换成长整型数函数的原型: long atol(const char *nptr);程序例:#include #include int main(void)long l;char *str = ;l = atol(lstr);printf(string = %s integer = %ldn, str, l);return(0);4.对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C+中应用什么实现?c 用宏定义,c+用 inline5.直接链接两个信令点的一组链路称作什么?PPP 点到点连接6.接入网用的是什么接口?接入网可由三个接口界定,即网络侧经由 SNI(业务节点接口)与业务节点相连,用户侧由 UNI与用户相连,管理方面则经 Q3 接口与电信管理网(TMN)相连。7.voip 都用了那些协议?IAXSIPH.323MGCPSkinny/SCCPUNISRIM8.软件测试都有那些种类?黑盒:针对系统功能的测试白合:测试函数功能,各函数接口9.确定模块的功能和模块的接口是在软件设计的那个队段完成的?概要设计阶段11.c *p1; unsigned long *p2; p1=(unsigned char *)0 x; p2=(unsigned long *)0 x;请问 p1+5=? ; p2+5=? ;答:p1+5=0 x ; p2+5=0 x ;二.选择题: 1.Ethternet 链接到 Internet 用到以下那个协议? D A.HDLC;B.ARP;C.UDP;D.TCP;E.ID 2.属于网络层协议的是:BC A.TCP;B.IP;C.ICMP;D.X.25 3.Windows 消息调度机制是:cA.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;三.找错题:1.请问下面程序有什么错误? int a602501000,i,j,k; for(k=0;k1000;k+) for(j=0;j250;j+) for(i=0;i60;i+) aijk=0;把循环语句内外换一下(编译的时候没错,运行的时候出错,但这个数组太大,如果放在栈中,还是会溢出,要作为全局变量)2.#define Max_CB 500 void LmiQueryCSmd(Struct MSgCB * pmsg) unsigned char ucCmdNum; . for(ucCmdNum=0;ucCmdNum 4; while (-i); return c;试题试题 4 4:(慧通):(慧通)1、 写出程序把一个链表中的接点顺序倒排typedef struct linknodeint data;struct linknode *next;node;/将一个链表逆置node *reverse(node *head)node *p,*q,*r;p=head;q=p-next;while(q!=NULL)r=q-next;q-next=p;p=q;q=r;head-next=NULL;head=p;return head;2、 写出程序删除链表中的所有接点void del_all(node *head)node *p;while(head!=NULL)p=head-next;free(head);head=p;cout释放空间成功!endl;3、两个字符串,s,t;把 t 字符串接到 s 字符串尾,s 字符串有足够的空间存放 t 字符串void connect(char *s, char *t, int i)char *q = t;char *p =s;if(q = NULL)return;while(*p!=0)p+;while(*q!=0)*p=*q;p+;q+;*p = 0;void main()char p7=ABC;char p2=EFG;connect(p, p2,3);printf(%s,p);4、分析下面的代码,是打印什么出来:char *a = hello;char *b = hello;if(a= =b)printf(YES);elseprintf(NO);常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器优化的话,会有可能 a 和 b同时指向同一个 hello 的。则地址相同。如果编译器没有优化,那么就是两个不同的地址,则不同。对 VC,是相同。试题试题 5 5:华为软件研发面试题:华为软件研发面试题 2 21、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用: ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量?答:extern例如在某个.cpp 中定义了一个全局变量 int a,可在头文件中加入 extern a;然后在需要引用的文件中包含该头文件。或者直接在文件中加入extern a;3、全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?答:可以在头文件中用 static 来定义同名全局变量。另外某个.C 文件中定义的非静态全局变量, 可以在其头文件中用 extern 声明, 需引用此全局变量的其他.C 只需包含此头文件即可。4、请写出下列代码的输出内容#include int main(void)int a,b,c,d;a=10;b=a+;c=+a; d=10*a+;printf(b,c,d:%d,%d,%d,b,c,d);return 0;答:10,12,1205、static 全局变量与普通的全局变量有什么区别? static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别?答: 1) 全局变量(外部变量)的说明之前再冠以 static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 3) static 函数与普通函数作用域不同,仅在本文件。 只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件综上所述:static 全局变量与普通的全局变量有什么区别:static 全局变量只初使化一次,防止在其他文件单元中被引用;static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值;static 函数与普通函数有什么区别:static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝6、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。7、设有以下说明和定义: typedef unionlong i;int k5; char c; DATE;struct data int cat; DATE cow;double dog; too;DATE max;则语句 printf(%d,sizeof(struct data)+sizeof(max);的执行结果是:考点:区别 struct 与 union.(一般假定在 32 位机器上)答: DATE 是一个 union, 变量公用空间. 里面最大的变量类型是 int5, 占用 20 个字节. 所以它的大小是 20. data 是一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52.8、队列和栈有什么区别?队列先进先出,栈后进先出10、请找出下面代码中的所有错误 (题目不错,值得一看)说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”#includestring.hmain()char*src=hello,world;char* dest=NULL;int len=strlen(src);dest=(char*)malloc(len);char* d=dest;char* s=srclen;while(len-!=0)*d+=*s-;printf(%s,dest);return 0;答:方法 1:一共有 4 个错误;int main()char* src = hello,world;int len = strlen(src);char* dest = (char*)malloc(len+1);/要为分配一个空间char* d = dest;char* s = &srclen-1; /指向最后一个字符while( len- != 0 ) *d+=*s-;*d = 0; /尾部要加0printf(%sn,dest);free(dest); / 使用完,应当释放空间,以免造成内存汇泄露dest = NULL; /防止产生野指针return 0;方法 2: (方法一需要额外的存储空间,效率不高.)不错的想法#include #include main()char str=hello,world;int len=strlen(str);char t;for(int i=0; ilen/2; i+)t=stri;stri=strlen-i-1; /小心一点strlen-i-1=t;printf(%s,str);return 0;29.IP Phone 的原理是什么?IP 电话(又称 IP PHONE 或 VoIP)是建立在 IP 技术上的分组化、数字化传输技术,其基本原理是:通过语音压缩算法对语音数据进行压缩编码处理,然后把这些语音数据按 IP 等相关协议进行打包,经过IP 网络把数据包传输到接收地,再把这些语音数据包串起来,经过解码解压处理后,恢复成原来的语音信号,从而达到由 IP 网络传送语音的目的。30.TCP/IP 通信建立的过程怎样,端口有什么作用?三次握手,确定是哪个应用程序使用该协议31.1 号信令和 7 号信令有什么区别,我国目前广泛使用的是那一种?1 号信令接续慢,但是稳定,可靠。7 号信令的特点是:信令速度快,具有提供大量信令的潜力,具有改变和增加信令的灵活性,便于开放新业务,在通话时可以随意处理信令,成本低。目前得到广泛应用。32.列举 5 种以上的电话新业务如“闹钟服务” 、 “免干扰服务” 、 “热线服务” 、 “转移呼叫” 、 “遇忙回叫” 、 “缺席用户服务” 、 “追查恶意呼叫” 、 “三方通话” 、 “会议电话” 、 “呼出限制” 、 “来电显示” 、 “虚拟网电话”等。试题试题 6 6:微软亚洲技术中心的面试题!:微软亚洲技术中心的面试题!1进程和线程的差别。答:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源: 进程是拥有资源的一个独立单位, 线程不拥有系统资源, 但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。2.测试方法答:人工测试:个人复查、抽查和会审机器测试:黑盒测试和白盒测试3Heap 与 stack 的差别。答:Heap 是堆,stack 是栈。Stack 的空间由操作系统自动分配/释放,Heap 上的空间手动分配/释放。Stack 空间有限,Heap 是很大的自由存储区C 中的 malloc 函数分配的内存空间即在堆上,C+中对应的是 new 操作符。程序在编译期对变量和函数分配内存都在栈上进行 ,且程序运行过程中函数调用时参数的传递也在栈上进行4Windows 下的内存是如何管理的?分页管理8谈谈 IA32 下的分页机制小页(4K)两级分页模式,大页(4M)一级11如果只想让程序有一个实例运行,不能运行两个。像winamp 一样,只能开一个窗口,怎样实现?用内存映射或全局原子(互斥变量) 、查找窗口句柄.FindWindow,互斥,写标志到文件或注册表,共享内存。.15Template 有什么特点?什么时候用?答: Template 可以独立于任何特定的类型编写代码,是泛型编程的基础.当我们编写的类和函数能够多态的用于跨越编译时不相关的类型时,用 Template.模板主要用于 STL 中的容器,算法,迭代器等以及模板元编程.(C+的 template 是实现在库设计和嵌入式设计中的关键。template 能实现抽象和效率的结合;同时 template 还能有效地防止代码膨胀)16谈谈 Windows DNA 结构的特点和优点。答:Windows Distributed interNet Application Architecture (Windows分布式应用结构, 简称WindowsDNA) 是微软创建新一代高适应性商业解决方案的框架, 它使公司能够充分地挖掘数字神经系统的优点。Windows DNA 是第一个将 Internet、客户/服务器、和用于计算的 PC 模型结合并集成在一起的为新一类分布式计算方案而设计的应用软件体系结构17. 网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答:1)进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在 SMP 机器上运行,而进程则可以跨机器迁移。试题试题 7 7:思科:思科3 一语句实现 x 是否为 2 的若干次幂的判断#define is2*n(x) (x & (x - 1)? 0 : 1)int main(void)int m = 512;cout (m & (m - 1) ? false : true) endl;/即当 m 中只有一位为 1 时,才为若干次幂值/考试大提示:若有两个及以上 1,则(m & (m - 1)不为 0,输出 0,表示不为 2 的若干次幂return(0);类比:x 为 2 的若干次幂即表示 x 中 1 的位数为 1,题目转化为求一个 32 位数中 1 的位数,如果为 1,则表示该数为 2 的若干次幂同理也可以利用此规则求一个 32 位数中 1 的位数, (m & (m - 1)每次可用消除一个 1,计算的次数即为 1 的个数 !试题试题 8 8:慧通:慧通:1. 什么是预编译,何时需要预编译:答: 就是指程序执行前的一些预处理工作,主要指#表示的.何时需要预编译?)、总是使用不经常改动的大型代码体。)、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。2. 下述三个有什么区别?char * const p;char const * pconst char *p解答:char * const p; /常量指针,p 的值不可以修改char const * p;/指向常量的指针,指向的常量值不可以改const char *p; /和 char const *p3. 解释下列输出结果char 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 是指针,它们指向相同的常量区域。节省内存。4. 以下代码中的两个 sizeof 用法有问题吗?C 易#include #include iostream.hvoid UpperCase( char str ) / 将 str 中的小写字母转换成大写字母int i;for( i=0; isizeof(str)/sizeof(str0); +i )/是指针的大小4,只循环了4次。数组做参数,会退化为指针。可改为strlen(str)if( a=stri & stri=z )stri -= (a-A );/由小写转大写void main()char str = aBcDefg;cout str字符长度为: sizeof(str)/sizeof(str0) endl;/是数组的大小8UpperCase( str );cout str (Y)?(Y):(X) /结尾没有;2、嵌入式系统中经常要用到无限循环,你怎么用 C 编写死循环。答:while(1)或者 for(;) /前面那个较好3、关键字 static 的作用是什么?答:1)定义静态局部变量,作用域从函数开始到结束,存放在堆区。 2) 在模块内的 static 函数只可被这一模块内的其它函数调用, 这个函数的使用范围被限制在声明它的模块内; 3) 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝4、关键字 const 有什么含意?答 :1)表示常量不可以修改的变量。 2)可以修饰参数,作为输入参数. 3)修饰函数,防止以外的改动. 4)修饰类的成员函数,不改变类中的数据成员.5、关键字 volatile 有什么含意?并举出三个不同的例子?答: 提示编译器对象的值可能在编译器未监测到的情况下改变。例子: 硬件时钟;多线程中被多个任务共享的变量等6. int (*s10)(int) 表示的是什么啊int (*s10)(int) 函数指针数组,每个指针指向一个 int func(int param)的函数。试题试题 1010:1.有以下表达式:int a=248; b=4;int const c=21;const int *d=&a;int *const e=&b;int constint*const f =&a;请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&b;*d=43;e=34;e=&a;f=0 x321f;答:*c 这是个什么东东,禁止*d 说了是 const, 禁止 d 的内容不能改e = &a 说了是 const 禁止 e 的地址不能改const int*const f =&a; 禁止f 的内容和地址都不能改2.交换两个变量的值,不使用第三个变量。即 a=3,b=5,交换之后 a=5,b=3;答:有两种解法, 一种用算术算法, 一种用(异或)a = a + b;b = a - b;a = a - b;ora = ab;/ 只能对 int,char.b = ab;a = ab;3.c 和 c+中的 struct 有什么不同?c+中 struct 和 class 的主要区别?答: c 和 c+中 struct 的主要区别是:c 中的 struct 不可以含有成员函数,而 c+中的 struct 可以。声明结构体变量时,c 中的 struct 不可以省略,而 c+中的 struct 可以。c+中 struct 和 class 的主要区别在于默认的存取权限不同,struct 默认为 public,而 class 默认为private.4.#include #include void getmemory(char *p) /函数的参数是局部变量,在这里给它分配内存还在,但是 P 释放了。 (静态变量生存期问题)p=(char *) malloc(100);int main( )char *str=NULL;getmemory(str);strcpy(str,hello world);printf(%s/n,str);free(str);return 0;答: 程序崩溃,getmemory 中的 malloc 不能返回动态内存, free()对 str 操作很危险解决方案 1:可改为按引用传递:void getmemory(char *&p)解决方案 2:返回指针Char* getmemory(char *p)p=(char *) malloc(100);return p;5.char szstr10;strcpy(szstr,);产生什么结果?为什么?答;正常输出,长度不一样,会造成非法的 OS,覆盖别的内容.0没保存6 列举几种进程的同步机制,并比较其优缺点。原子操作信号量机制自旋锁管程,会合,分布式系统7 进程之间通信的途径共享存储系统消息传递系统管道:以文件系统为基础8 进程死锁的原因资源竞争及进程推进顺序非法9死锁的 4 个必要条件互斥、请求保持、不可剥夺、环路10 死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁11 操作系统中进程调度策略有哪几种?FCFS(先来先服务),优先级,时间片轮转,多级反馈试题 11:面试经典试题1 编程基础1.1 基本概念1. const的理解:const char*, char const*, char*const的区别问题几乎是 C+面试中每次 都会有的题目。 事实上这个概念谁都有只是三种声明方式非常相似很容易记混。 Bjarne 在他的 The C+Programming Language 里面给出过一个助记的方法: 把一个声明从右向左读。char * const cp; ( * 读成 pointer to )cp is a const pointer to charconst char * p;p is a pointer to const char;char const * p;同上因为 C+里面没有 const*的运算符,所以 const 只能属于前面的类型。2. c 指针int *pn;-指针数组,每个元素均为指向整型数据的指针。int (*p)n;-p 为指向一维数组的指针,这个一维数组有 n 个整型数据。int *p();-函数带返回指针,指针指向返回的值。int (*p)();-p 为指向函数的指针。3. 数组越界问题 (这个题目还是有点小险的)下面这个程序执行后会有什么错误或者效果:#define MAX 255int main()unsigned char AMAX,i;for (i=0;i=MAX;i+)Ai=i;解答:MAX=255,数组 A 的下标范围为:0.MAX-1,这是其一,其二 当 i 循环到 255 时,循环内执行:A255=255;这句本身没有问题,但是返回 for (i=0;i=MAX;i+)语句时,由于 unsigned char 的取值范围在(0.255),i+以后 i 又为 0 了.无限循环下去.注:char 类型为一个字节,取值范围是-128,127,unsigned char 0 ,2554. C+:memset ,memcpy 和 strcpy 的根本区别?答:#include memory.hmemset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为 或;例:char a100;memset(a, , sizeof(a);memcpy 用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:chara100,b50; memcpy(b, a, sizeof(b);注意如用 sizeof(a),会造成 b 的内存地址溢出。strcpy 就只能拷贝字符串了,它遇到 0就结束拷贝;例: char a100,b50;strcpy(a,b);如用strcpy(b,a),要注意 a 中的字符串长度(第一个0之前)是否超过 50 位,如超过,则会造成 b 的内存地址溢出。strcpy原型:extern char *strcpy(char *dest,char *src); ASSERT(dest!=NULL)&(src!=NULL); Char *address = dest;While(*dest+=*src+)!=0) Continue; Return address; 用法:#include 功能:把 src 所指由 NULL 结束的字符串复制到 dest 所指的数组中。说明:src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。返回指向 dest 的指针。memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);assert (dest!=NULL)&(src!=NULL);assert (destsrc+count)|(srcdest+count);/防止内存重叠,也可以用 restrict 修饰指针 Byte* bdest = (Byte*)dest; Byte* bsrc = (Byte*) src; While(count-0) *bdest+ = *bsrc+; Return dest; 用法:#include 功能:由 src 所指内存区域复制 count 个字节到 dest 所指内存区域。说明:src 和 dest 所指内存区域不能重叠,函数返回指向 dest 的指针。Memset原型:extern void *memset(void *buffer, char c, int count);用法:#include功能:把 buffer 所指内存区域的前 count 个字节设置成字符 c。说明:返回指向 buffer 的指针。5. ASSERT()是干什么用的答:ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为 0,则继续执行后面的语句。这个宏通常用来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量 n 在程序中不应该为 0,如果为 0 可能导致错误,你可以这样写程序:.ASSERT( n != 0);k = 10/ n;.ASSERT 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。assert()的功能类似, 它是ANSI C 标准中规定的函数, 它与 ASSERT 的一个重要区别是可以用在 Release版本中。6. system(pause);作用?答:系统的暂停程序,按任意键继续,屏幕会打印,按任意键继续。 。 。 。 。 省去了使用 getchar() ;7. 请问 C+的类和 C 里面的 struct 有什么区别?答:c+中的类具有成员保护功能,并且具有继承,多态这类 oo(Object Oriented 面向对象)特点,而 c里的 struct 没有c 里面的 struct 没有成员函数,不能继承,派生等等.8. 请讲一讲析构函数和虚函数的用法和作用?答:析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。只是在类对象生命期结束的时候,由系统自动调用释放在构造函数中分配的资源。这种在运行时,能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。另: 析构函数一般在对象撤消前做收尾工作,比如回收内存等工作,虚拟函数的功能是使子类可以用同名的函数对父类函数进行覆盖,并且在调用时自动调用子类覆盖函数,如果是纯虚函数,则纯粹是为了在子类覆盖时有个统一的命名而已。注意:子类重新定义父类的虚函数的做法叫覆盖,override,而不是 overload(重载),重载的概念不属于面向对象编程,重载指的是存在多个同名函数,这些函数的参数表不同.重载是在编译期间就决定了的,是静态的,因此,重载与多态无关.与面向对象编程无关.含有纯虚函数的类称为抽象类,不能实例化对象,主要用作接口类9. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答;全局变量的生命周期是整个程序运行的时间, 而局部变量的生命周期则是局部函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法。全局变量在 main 函数调用后,就开始分配,静态变量则是在 main 函数前就已经初始化了。局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)10. 8086 是多少位的系统?在数据总线上是怎么实现的?答:8086 系统是 16 位系统,其数据总线是 20 位。12 程序设计1. 编写用 C 语言实现的求 n 阶阶乘问题的递归算法:答:long int fact(int n)If(n=0|n=1) Return 1;Else Return n*fact(n-1);2. 二分查找算法:1) 递归方法实现:int BSearch(elemtype