1C语言工程师面试考试题第一部分填空&选择题1、程序的局部变量存在于堆栈中,全局变量存在于静态区中,动态申请数据存在于堆中。2、对于一个频繁使用的短小函数,在C语言中应用宏定义实现,在C++中应用inline实现3、直接链接两个信令点的一组链路称作PPP点到点连接4、接入网用的是V5接口?5、voip都用了那些协议:H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议6、软件测试都有:黑盒(针对系统功能的测试)和白盒(测试函数功能,各函数接口)7、确定模块的功能和模块的接口是在软件设计的概要设计阶段完成的。8、Ethternet链接到Internet用到以下那个协议(D)A.HDLCB.ARPC.UDPD.TCPE.ID9、属于网络层协议的是:(BC)A.TCPB.IPC.ICMPD.X.2510、写出下列代码的输出内容110#includestdio.hintinc(inta){return(++a);}intmulti(int*a,int*b,int*c){return(*c=*a**b);}typedefint(FUNC1)(intin);typedefint(FUNC2)(int*,int*,int*);voidshow(FUNC2fun,intarg1,int*arg2){FUNC1p=&inc;inttemp=p(arg1);fun(&temp,&arg1,arg2);printf(%dn,*arg2);}main(){inta;//局部变量a为0;show(multi,10,&a);return0;}2第二部分简答题1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用::;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、请找出下面代码中的所有错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”#includestring.hmain(){char*src=hello,world;char*dest=NULL;intlen=strlen(src);dest=(char*)malloc(len);char*d=dest;char*s=src[len];while(len--!=0)d++=s--;printf(%s,dest);return0;}答:一共有4个错误;intmain(){char*src=hello,world;intlen=strlen(src);char*dest=(char*)malloc(len+1);//要为分配一个空间char*d=dest;char*s=&src[len-1];//指向最后一个字符while(len--!=0)*d++=*s--;*d=0;//尾部要加’\0’printf(%sn,dest);free(dest);//使用完,应当释放空间,以免造成内存汇泄露dest=NULL;//防止产生野指针return0;}33、Heap与stack的差别。答:Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行4、网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答:1)进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。