C语言面试题目(2)

  C语言面试题目(2)
2007-09-28 14:24:06 本文已公布到博客频道职场·创业分类

19.   设有以下说明和定义:(注意变量占用字节在不同平台下是不同的)
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____
      DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20
data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.
所以结果是 20 + 32 = 52.
当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20

20.   队列和栈有什么区别?
      队列先进先出,栈后进先出

21.   写出下列代码的输出内容(考察指针函数的用法)
#include<stdio.h>
int inc(int a)
{
 return(++a);
}
int multi(int*a,int*b,int*c)
{
 return(*c=*a**b);
}
typedef int(*FUNC1)(int);
typedef int(*FUNC2)(int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
 FUNC1 p=&inc; // 这里用&inc与inc都可以,都是取地址
 int temp =p(arg1);
 fun(&temp,&arg1, arg2);
 printf("%d/n",*arg2);
}
main()
{
 int a;
 show(multi,10,&a);
 return 0;
}
      110

22.   请找出下面代码中的所有错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
1、#include"string.h"
2、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=src[len];
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 = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加/0
printf("%s/n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
方法2:
#include <stdio.h>
#include <string.h>
main()
{
char str[]="hello,world";
int len=strlen(str);
char t;
for(int i=0; i<len/2; i++)
{
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf("%s",str);
return 0;
}

23.   -1,2,7,28,,126请问28和126中间那个数是什么?为什么?
第一题的答案应该是4^3-1=63
规律是n^3-1(当n为偶数0,2,4)
      n^3+1(当n为奇数1,3,5)
答案:63

24.   用两个栈实现一个队列的功能?要求给出算法和思路!
设2个栈为A,B, 一开始均为空.
入队:
将新元素push入栈A;
出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
(3)将栈B的栈顶元素pop出;
25.   在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
函数名: atol
功 能: 把字符串转换成长整型数
用 法: long atol(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld/n", str, l);
return(0);
}
26.   对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
      c用宏定义,c++用inline
27.   直接链接两个信令点的一组链路称作什么?
      PPP点到点连接
 
28.   软件测试都有那些种类?
      黑盒:针对系统功能的测试    白盒:测试函数功能,各函数接口
 
29.   确定模块的功能和模块的接口是在软件设计的那个队段完成的?
      概要设计阶段
 
30.   unsigned char *p1;
    unsigned long *p2;
    p1=(unsigned char *)0x801000;
    p2=(unsigned long *)0x810000;
    请问p1+5=  ;
            p2+5=  ;
      p1+5= 0x801005 ;
      p2+5= 0x801014 ;(long型在32位编译器里为4byte,这里0x14=20)

31.   属于网络层协议的是:
      A.TCP;B.IP;C.ICMP;D.X.25

32.   Windows消息调度机制是: (C)
      A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;

33.   IP Phone的原理是什么?
      IPV6

34.   TCP/IP通信建立的过程怎样,端口有什么作用?
      三次握手,确定是哪个应用程序使用该协议

35.   1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?

36.   列举5种以上的电话新业务?
微软亚洲技术中心的面试题

37.   进程和线程的差别
       线程是指进程内的一个执行单元,也是进程内的可调度实体.
       与进程的区别:

      (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
      (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
      (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
      (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
38.   Heap与stack的差别。
      Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区 C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

39.   Windows下的内存是如何管理的?

40.   介绍.Net和.Net的安全性。

41.   客户端如何访问.Net组件实现Web Service?

42.   C/C++编译器中虚表是如何完成的?

42.   谈谈COM的线程模型。然后讨论进程内/外组件的差别。

43.   谈谈IA32下的分页机制
      小页(4K)两级分页模式,大页(4M)一级

44.   给两个变量,如何找出一个带环单链表中是什么地方出现环的?
      一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方

45.   在IA32中一共有多少种办法从用户态跳到内核态?
      通过调用门,从ring3到ring0,中断从ring3到ring0,进入vm86等等

46.   如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?
      用内存映射或全局原子(互斥变量)、查找窗口句柄.. FindWindow,互斥,写标志到文件或注册表,共享内存。.  
47.   如何截取键盘的响应,让所有的‘a’变成‘b’?
       键盘钩子SetWindowsHookEx

48.   Apartment在COM中有什么用?为什么要引入?

49.   存储过程是什么?有什么用?有什么优点?
      我的理解就是一堆sql的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比单独执行SQL快很多
50.   Template有什么特点?什么时候用?

51.   谈谈Windows DNA结构的特点和优点。

52.   网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执

行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则

可以跨机器迁移。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值