1、(一)1什么是预编译,何时需要预编译: 答案: 、总是使用不经常改动大型代码体。 、程序由各种模块构成,所有模块都使用一组原则包括文献和相似编译选项。在这种状况下,可以将所有包括文献预编译为一种预编译头。 2 char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p;/常量指针,p值不可以修改 char const * p;/指向常量指针,指向常量值不可以改 const char *p; /和char const *p 3char str1 = abc;char str2 = abc;const char
2、 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;out ( str7 = str8 ) endl;成果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自内存空间;而str5,str6,str7,str8是指针,它们指向相似常量区域。
3、4如下代码中两个sizeof用法有问题吗? C易 void UpperCase( char str ) / 将 str 中小写字母转换成大写字母 for( size_t i=0;i sizeof(str)/sizeof(str0);+i ) if( a =stri & stri =z ) stri -= (a-A ); char str = aBcDe; cout str字符长度为: sizeof(str)/sizeof(str0) endl;UpperCase( str );cout str (Y)?(Y):(X) /结尾没有; 10 嵌入式系统中经常要用到无限循环,你怎么用C编写死循环?答
4、案:while(1)或者for(;) 11 核心字static作用是什么?答案:定义静态变量 或 静态函数12 核心字const有什么含意?答案:表达常量不可以修变化量。 13 核心字volatile有什么含意?并举出三个不同例子?答案:提示编译器对象值也许在编译器未监测到状况下变化。 (1)并行设备硬件寄存器(如状态寄存器) (2)中断函数中会访问到非自动变量 (3)多线程应用中被几种任务共享变量14 int (*s10)(int) 表达是什么啊?答案:int (*s10)(int) 函数指针数组,每个指针指向一种int func(int param)函数。 15 有如下表达式: int a
5、=248,b=4; int const c=21; const int *d=&a; int *const e=&b; int const *f const =&a;请问下列表达式哪些会被编译器禁止?为什么?答案:*c=32; d=&b; *d=43; e=34; e=&a; f=0x321f; *c 这是个什么东东,禁止 *d 说了是const, 禁止 e = &a 说了是const 禁止 const *f const =&a;禁止 16 互换两个变量值,不使用第三个变量。即a=3,b=5,互换之后a=5,b=3;答案:有两种解法,一种用算术算法,一种用(异或) 。a = a + b;b =
6、 a - b;a = a - b;或者 a = ab;/ 只能对int,char. b = ab;a = ab;or a = b = a;17 c和c+中struct有什么不同?答案:c和c+中struct重要区别是c中struct不可以具有成员函数,而c+中struct可以。c+中struct和class重要区别在于默认存取权限不同,struct默以为public,而class默以为private 18.#include #include void getmemory(char *p) p=(char *) malloc(100); strcpy(p,hello world); int ma
7、in( ) char *str=NULL; getmemory(str); printf(%s/n,str); free(str); return 0; 答案:程序崩溃,getmemory中malloc 不能返回动态内存, free()对str操作很危险 19 char szstr10; strcpy(szstr,); 产生什么成果?为什么?答案: 长度不同样,会导致非法OS 20 列举几种进程同步机制,并比较其优缺陷答案: 原子操作 信号量机制 自旋锁 管程,会合,分布式系统 21.进程之间通信途径答案:共享存储系统消息传递系统管道:以文献系统为基本 22.进程死锁因素答案:资源竞争及进程推
8、动顺序非法 23.死锁4个必要条件答案:互斥、祈求保持、不可剥夺、环路 24.死锁解决答案:鸵鸟方略、防止方略、避免方略、检测与解除死锁 25. 操作系统中进程调度方略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈 26.类静态成员和非静态成员有何区别?答案:类静态成员每个类只有一种,非静态成员每个对象一种 27.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0;是接口,子类必要要实现 28.数组和链表区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态变化 29.ISO七层模型是什么?tcp/udp是属于哪一层?tcp/
9、udp有何优缺陷?答案:应用层 表达层 会话层 传播层 网络层 链路层 物理层 ; tcp /udp属于传播层 ; TCP 服务提供了数据流传播、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP 不同, UDP 并不提供对 IP 合同可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简朴, UDP 头包括很少字节,比 TCP 负载消耗少。 tcp:提供稳定传播服务,有流量控制,缺陷是包头大,冗余性不好 udp:不提供稳定服务,包头小,开销小 30:(void *)ptr 和 (*(void*)ptr成果与否相似?其中ptr为同一种指针答案:.(void *)ptr 和 (*(vo
10、id*)ptr值是相似 31:int main() int x=3;printf(%d,x);return 1; 问函数既然不会被其他函数调用,为什么要返回1?答案:mian中,c原则以为0表达到功,非0表达错误。详细值是某中详细出错信息 32 要对绝对地址0x100000赋值,咱们可以用 (unsigned int*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应当怎么做?答案:*(void (*)( )0x100000 ) ( );一方面要将0x100000强制转换成函数指针,即:(void (*)()0x100000 然后再调用它:*(void
11、 (*)()0x100000)();用typedef可以看得更直观些:typedef void(*)() voidFuncPtr;*(voidFuncPtr)0x100000)();33,已知一种数组table,用一种宏定义,求出数据元素个数答案: #define NTBL(table) (sizeof(table)/sizeof(table0) 34。线程与进程区别和联系?线程与否具备相似堆栈?dll与否有独立堆栈?答案:进程是死,只是某些资源集合,真正程序执行都是线程来完毕,程序启动时候操作系统就帮你创立了一种主线程。每个线程有自己堆栈。 DLL中有无独立堆栈,这个问题不好回答,或者说这个
12、问题自身与否有问题。由于DLL中代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中代码是EXE中线程所调用,那么这个时候是不是说这个DLL没有自己独立堆栈?如果DLL中代码是由DLL自己创立线程所执行,那么是不是说DLL有独立堆栈?以上讲是堆栈,如果对于堆来说,每个DLL有自己堆,因此如果是从DLL中动态分派内存,最佳是从DLL中删除,如果你从DLL中分派内存,然后在EXE中,或者此外一种DLL中删除,很有也许导致程序崩溃 35。unsigned short A = 10;printf(A = %un,A);char c=128;printf(c=%dn,c);输出多少?并分析过程答案:第
13、一题,A 0xfffffff5,int值 为11,但输出是uint。因此输出 第二题,c0x10,输出是int,最高位为1,是负数,因此它值就是0x00补码就是128,因此输出128。这两道题都是在考察二进制向int或uint转换时最高位解决。 (二) 1. -1,2,7,28,126请问28和126中间那个数是什么?为什么?答案:第一题答案应当是43-1=63 规律是n3-1(当n为偶数0,2,4) n3+1(当n为奇数1,3,5) 2.用两个栈实现一种队列功能?规定给出算法和思路!答案:设2个栈为A,B,一开始均为空. 入队:将新元素push入栈A;出队:(1)判断栈B与否为空; (2)如
14、果不为空,则将栈A中所有元素依次pop出并push到栈B; (3)将栈B栈顶元素pop出;这样实现队列入队和出队平摊复杂度都还是O(1),比上面几种办法要好。 3.在c语言库函数中将一种字符转换成整型函数是atol()吗,这个函数原型是什么?答案:函数名:atol 功 能:把字符串转换成长整型数 用 法:long atol(const char *nptr);程序例:#include #include int main(void) long l;char *str = 98765432;l = atol(lstr);printf(string = %s integer = %ldn,str,l
15、);return(0); 4。对于一种频繁使用短小函数,在C语言中应用什么实现,在C+中应用什么实现?答案:c用宏定义,c+用inline 5。直接链接两个信令点一组链路称作什么?答案:PPP点到点连接7。软件测试均有那些种类?答案:黑盒:针对系统功能测试 白合:测试函数功能,各函数接口 8。拟定模块功能和模块接口是在软件设计那个队段完毕?答案:概要设计阶段 9。enum string x1, x2, x3=10, x4, x5, x; 问x;答案:取值在0。1。10。11。12中一种 10。unsigned char *p1; unsigned long *p2; p1=(unsigned
16、char *)0x801000; p2=(unsigned long *)0x810000; 请问p1+5= ; p2+5= ;答案:801005; 810014。不要忘掉了这个是16进制数字,p2要加20变为16进制就是14 选取题: 1.Ethternet链接到Internet用到如下那个合同? A. HDLC; B. ARP; C. UDP; D. TCP; E. ID 答案 D2.属于网络层合同是: A.TCP; B.IP; C.ICMP; D.X.25 答案 B3.Windows消息调度机制是: A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;答案:C找错题: 1.请问下面程
17、序有什么错误? int a602501000,i,j,k; for(k=0;k =1000;k+) for(j=0;j 250;j+) for(i=0;i Max_GT_Length) return GT_Length_ERROR; . 答案:要释放内存问答题:1.IP Phone原理是什么?答案:IPV6 2.TCP/IP通信建立过程如何,端口有什么作用?答案:三次握手,拟定是哪个应用程序使用该合同 (三) 1、局部变量能否和全局变量重名?答案:能,局部会屏蔽全局。要用全局变量,需要使用: 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名局部变量,而不会用到全局变量。对于有些编
18、译器而言,在同一种函数内可以定义各种同名局部变量,例如在两个循环体内都定义一种同名局部变量,而那个局部变量作用域就在那个循环体内 2、如何引用一种已经定义过全局变量?答案:extern 可以用引用头文献方式,也可以用extern核心字,如果用引用头文献方式来引用某个在头文献中声明全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不可以定义在可被各种.C文献包括头文献中?为什么?答案:可以,在不同C文献中以static形式来声明同名全局变量。可以在不同C文献中声明同名全局变量,前提是其
19、中只能有一种C文献中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题?它是什么意思?答案:和while(1)相似。 5、dowhile和whiledo有什么区别?答案:前一种循环一遍再判断,后一种判断后来再循环。 6、 请写出下列代码输出内容include main() 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,120 a=10; b=a+;/a=11 b=10 c=+a;/a=12 c=12 d=10*a+;/a=13 d=120 高档题 1、
20、static全局变量与普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答案:全局变量(外部变量)阐明之前再冠以static 就构成了静态全局变量。全局变量自身就是静态存储方式,静态全局变量固然也是静态存储方式。 这两者在存储方式上并无不同。这两者区别虽在于非静态全局变量作用域是整个源程序, 当一种源程序由各种源文献构成时,非静态全局变量在各个源文献中都是有效。而静态全局变量则限制了其作用域, 即只在定义该变量源文献内有效, 在同一源程序其他源文献中不能使用它。由于静态全局变量作用域局限于一种源文献内,只能为该源文献内函数公用,因而可以
21、避免在其他源文献中引起错误。从以上分析可以看出, 把局部变量变化为静态变量后是变化了它存储方式即变化了它生存期。把全局变量变化为静态变量后是变化了它作用域,限制了它使用范畴。 static函数与普通函数作用域不同。仅在本文献。只在当前源文献中使用函数应当阐明为内部函数(static),内部函数应当在当前源文献中阐明和定义。对于可在当前源文献以外使用函数,应当在一种头文献中阐明,要使用这些函数源文献要包括这个头文献 static全局变量与普通全局变量有什么区别:static全局变量只初使化一次,防止在其她文献单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始
22、化一次,下一次根据上一次成果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 2、程序局部变量存在于()中,全局变量存在于()中,动态申请数据存在于( )中。答案:栈;静态区;堆 3、 设有如下阐明和定义: typedef union long i;int k5;char c; DATE;struct data int cat; DATE cow; double dog; too;DATE max;则语句 printf(%d,sizeof(too)+sizeof(max);执行成果是:_20_答案:DATE是一种union,变量公
23、用空间. 里面最大变量类型是int5,占用20个字节. 因此它大小是20 data是一种struct,每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 因此成果是 20 + 32 = 52. 固然.在某些16位编辑器下,int也许是2字节,那么成果是 int2 + DATE10 + double8 = 20 4、队列和栈有什么区别?答案:队列先进先出,栈后进先出6、已知一种单向链表头,请写出删除其某一种结点算法,规定,先找到此结点,然后删除。答案:slnodetype *Delete(slnodetype *Head,int key)if(Head-nu
24、mber=key) Head=Pointer-next; free(Pointer); break; Back = Pointer; Pointer=Pointer-next;if(Pointer-number=key) Back-next=Pointer-next; free(Pointer); break; void delete(Node* p) if(Head = Node) while(p) 7、请找出下面代码中因此错误阐明:如下代码是把一种字符串倒序,如“abcd”倒序后变为“dcba” includestring.hmain() char*src=hello,world; cha
25、r* 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; 答案:include int main() char* src = hello,world;int len = strlen(src);char* dest = (char*)malloc(len+1)*sizeof(char); /要为0分派一种空间 char* d = dest;char* s = &srclen-1; /指
26、向最后一种字符 while( len- != 0 ) *d+=*s-;*d = 0; /尾部要加0 printf(%sn,dest);free(dest); / 使用完,应当释放空间,以免导致内存汇泄露 return 0; 华为笔试题(3) -09-29 19:41 一、判断题(对写T,错写F并阐明因素,每小题4分,共20分) 1、有数组定义int a22=1,2,3;则a01值为0。(对的 ) 2、int (*ptr) (),则ptr是一维数组名字。(错误 int (*ptr) ();定义一种指向函数指针变量) 3、指针在任何状况下都可进行,=,=,=运算。(错误) 4、switch(c)
27、语句中c可以是int ,long,char ,float ,unsigned int 类型。(错,不能用实形) 二、填空题(共30分) 1、在windows下,写出运营成果,每空2分,共10分。 char str = Hello;char *p=str;int n=10;sizeof(str)=( ) sizeof(p)=( ) sizeof(n)=( ) void func(char str100) sizeof(str)=( ) 答案:6,4,4,4,详细解释请参看我空间里“C/C+程序员应聘试题剖析” 2、void getmemory(char *p, int num) *p=(char
28、*)malloc(num); void test(void) char *str=NULL; getmemory(&str,100); strcpy(str,hello); printf(str); 运营test函数有什么成果?( )10分 答案:输出hello,但是发生内存泄漏。 3、 设int arr=6,7,8,9,10; int *ptr=arr; *(ptr+)+=123; /先算*ptr=*ptr+123;再 ptr+;因此arr0= 129;printf(%d,%d,*ptr,*(+ptr); /按从右到左顺序() 10分答案:8, 8。这道题目意义不大,由于在不同编译器里pri
29、ntf参数方向是不同样,在vc6.0下是从右到左,这里先*(+ptr) 后*pt,于是成果为8,8 三、编程题(第一小题20,第二小题30分) 1、 不使用库函数,编写函数int strcmp(char *source,char *dest) 相等返回0,不等返回-1; 答案:一、int strcmp(char *source,char *dest) assert(source!=NULL)&(dest!=NULL); int i,j; for(i=0;sourcei=desti;i+) if(sourcei=0 & desti=0) return 0; else return -1; 答案:
30、二、int strcmp(char *source,char *dest) while ( (*source != 0) & (*source = *dest) source+;dest+; return ( (*source) - (*dest) ) ?-1 :0; 2、 写一函数int fun(char *p)判断一字符串与否为回文,是返回1,不是返回0,出错返回-1 答案:一、int fun(char *p) if(p=NULL) return -1; else int length = 0; int i = 0; int judge = 1; length = strlen(p); f
31、or(i=0;i length/2;i+) if(pi!=plength-1-i) judge = 0; break; if(judge = 0) return 0; else return 1; 答案:二、int fun(char *p) int len = strlen(p) - 1;char *q = p + len;if (!p) return -1;while (p q) if (*p+) != (*q-) return 0; return 1; 华为笔试网络题(3) -09-30 12:48 1.在OSI 7 层模型中,网络层功能有(B ) A.保证数据传送对的无误 B.拟定数据包
32、如何转发与路由 C.在信道上传送比特流 D.纠错与流控 2.FDDI(光纤分布式数据接口) 使用是_局域网技术。(C ) A.以太网; B.迅速以太网; C.令牌环; D.令牌总线。 3.下面那种LAN 是应用CSMA/CD合同(C) A.令牌环 B.FDDI C.ETHERNET D.NOVELL 4.TCP 和UDP 合同相似之处是 ( C) A.面向连接合同 B.面向非连接合同 C.传播层合同 D.以上均不对 5.应用程序PING 发出是_报文.( C) A.TCP 祈求报文。 B.TCP 应答报文。 C.ICMP 祈求报文。 D.ICMP 应答报文。 6.如下说法错误是(多) ( BD
33、) A.中继器是工作在物理层设备 B.集线器和以太网互换机工作在数据连路层 C.路由器是工作在网络层设备 D.桥能隔离网络层广播 7.当桥接受分组目MAC地址在桥映射表中没有相应表项时,采用方略是( C) A.丢掉该分组 B.将该分组分片 C.向其她端口广播该分组 D.以上答案均不对 8.LAN Switch 在网络层次模型中地位( B) A.物理层 B.链路层 C.网络层 D.以上都不是 9.不大于_TCP/UDP端标语已保存与既有服务一一相应,此数字以上端标语可自由分派。( C) A.199 B.100 C.1024 D.2048 10.当一台主机从一种网络移到另一种网络时,如下说法对的是
34、 ( B) A.必要变化它IP 地址和MAC 地址 B.必要变化它IP 地址,但不需改动MAC 地址 C.必要变化它MAC 地址,但不需改动IP 地址 D.MAC 地址.IP 地址都不需改动答案:1.B;2.C;3.C;4.C;5.C;6.BD;7.C;8.B;9.C;10.B. 华为笔试题(4) -09-30 13:00 1. 找错 void test1() char string10; char* str1=; strcpy(string,str1); 答:表面上并且编译都不会错误。但如果string数组原意表达是字符串话,那这个赋值就没有达到意图。最佳定义为char string11,这
35、样最后一种元素可以存储字符串结尾符0;void test2() char string10,str110; for(int I=0;I 10;I+) str1I =a; strcpy(string,str1); 答:strcpy使用错误,strcpy只有遇到字符串末尾0才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str19=0,这样就正常了。 void test3(char* str1) char string10; if(strlen(str1) =10) strcpy(string,str1); 答:这又会浮现第一道改错题错误了。strlen(str1)算出来值
36、是不包括结尾符0,如果str1刚好为10个字符1结尾符,string就得不到结尾符了。可将strlen(str1) =10改为strlen(str1) 10。 2. 找错 #define MAX_SRM 256 DSN get_SRM_no() static int SRM_no; int I; for(I=0;I=MAX_SRM) return (NULL_SRM); else return SRM_no; 答:我不懂得这段代码详细功能,但明显有两个错误 1,SRM_no没有赋初值 2,由于static声明,使该函数成为不可重入(即不可预测成果)函数,由于SRM_no变量放在程序全局存储区中,每次调用时候还可以保持本来赋值。这里应当去掉static声明。 3. 写出程序运营成果 int sum(int a) auto int c=0; static int b=3; c+=1; b+=2; return(a+b+c); void main() int I; int a=2; for(I=0;I 5;I+)