嵌入式软件工程师笔试题
嵌入式软件工程师笔试题__面试宝典

1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/** 题目:将一个字符串逆序* 完成时间:2006.9.30深圳极讯网吧* 版权归刘志强所有* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!*/#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1); }return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head){List *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;}void main(void) {struct List *head,*p; int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数N个BYTE的数据中有多少位是1。
嵌入式软件工程师笔试题

1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里( byte )里面有多少bit被置14、搜索给定的字节 (byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/**题目:将一个字符串逆序*完成时间: 2006.9.30 深圳极讯网吧*版权归刘志强所有*描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!*/#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1);}return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head){List *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;}void main(void){struct List *head,*p;int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数 N 个 BYTE的数据中有多少位是1。
嵌入式软件工程师笔试题目

1. 编写一个函数,判断处理器是使用Big_endian 模式(返回0)还是Little_endian 模式(返回1)存储数据[cpp] view plaincopyprint?1. int checkCPU()2. {3. union w4. {5. int a;6. char b;7. }c;8. c.a = 1;9.10. return (c.b == 1);11. }/* 共用体的所有成员都是从地地址开始存放的2. 判断单链表是否存在环形链表问题[cpp] view plaincopyprint?1. bool IsLoop(node *head,node **start)2. {3. node *p1 = head, *p2 = head;4.5. if(head == NULL || head->next= NULL)=6. {7. return false;8. }9. do10. {11. p1 = head->next;12. p2 = head->next->next;13. }while(p2 && p2->next && p1 != p2);14. if(p1 == p2)15. {16. *start = p1;17. return true;18. }19. else20. return false;21. }3. 计算一个无符号32 位整型( unsigned int)的bit 有多少位为 1 或0 [cpp] view plaincopyprint?1. int caculate_bit(unsigned int num)2. {3. unsigned int mask = 1 << 31;4. int n = 0;5. int i;6.7. for(i = 0; i < 32; i++)8. {9. if(num & mask)10. {11. n++;12. }13. num <<= 1;14. }15.16. return n;17. }4. 保证malloc 和free 成对出现[cpp] view plaincopyprint?1. char * function(void)2. {3. char *p;4. p = ( char *)malloc( ⋯);5. if(p==NULL)6. ⋯;7. ⋯/* 一系列针对p 的操作*/8. return p;9. }在某处调用function() ,用完function 中动态申请的内存后将其free,如下:char *q = function();free(q);上述代码明显是不合理的,因为违反了malloc 和free 成对出现的原则,即" 谁申请,就由谁释放"原则。
(完整word版)嵌入式软件工程师笔试题

笔试题1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。
2:为了向二进制文件尾部增加数据,打开文件的方式应采用A.″ab″B.″rb+″C.″wb″D.″wb+″参考答案:D3:下述程序执行后的输出结果是#includemain(){int x=’f';printf(“%c\n”,’a’+(x-‘a’+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级高的是A.!B.%C.>>D.= =参考答案:A5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*aB.a [ 0 ]C.aD.a++参考答案:D6:执行语句“ k=7>>1; ”后,变量 k 的当前值是A.15B.31C.3D.1参考答案:C7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型A.voidB.charC.floatD.int参考答案:D8:若main()函数带参数,参数个数多是A.0B.1C.2D.3参考答案:C 只知道有定义形式main(int argc,char* argv[])) 9:若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出结果是int a=13,b=94;printf(″%d\n″,MOD(b,a+4));A.5B.7C.9D.11参考答案:B10:下列各个错误中,哪一个不属于编译错误A.改变 x 原值 3 为 5 ,写作“ x==5 ;”B.花括号不配对C.复合语句中的后一条语句后未加分号D.变量有引用、无定义11:下列程序段运行后, x 的值是( )a=1;b=2;x=0;if(!( — a))x — ;if(!b)x=7;else ++x;A.0B.3C.6D.7参考答案:A12:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:下列转义字符中错误的是A.′\000′B.′\14′C.′\x111′D.′\2′参考答案:C error C2022: ‘273’ : too big for character15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算16:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B17:表达式strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个A.非零整数B.浮点数C.0D.字符参考答案: A18:设struct{ short a;char b;float c;}cs;则sizeof(cs)的值是A.4B.5C.6D.7参考答案: D 字节对齐的话应该是819:若变量已正确定义,表达式( j=3 , j++ )的值是A.3B.4C.5D.0参考答案:A20:C 语言中运算对象必须是整型的运算符是A.%B./C.!参考答案:A21:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?22:01 #include0203 void main()0405 { int c;0607 while ((c=getchar())!= ′\ n ′ )0809 switch(c - ′ 2 ′ )1011 { case 0:1213 case 1:putchar(c+4);break;1415 case 2:putchar(c+4);break;1617 case 3:putchar(c+3);break;1819 default:putchar(c+2);break;2021 }2223 printf( ″\ n ″ );2425 }运行时输入: 2473 ,输出结果:参考答案:6897 VC++6.0测试过23:写一语句实现x是否为2的若干次幂的判断。
嵌入式软件工程师经典笔试题

预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B))这个测试是为下面的目的而设的:1). 标识#define在宏中应用的基本知识。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if- then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。
这问题对区分一个正常的伙计和一个书呆子是很有用的。
只有书呆子才会读C语言课本的附录去找出象这种问题的答案。
当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。
嵌入式软件工程师笔试题目

一、选择题1.在嵌入式系统中,Bootloader的主要作用是:A.提供操作系统的图形界面B.加载并启动操作系统(正确答案)C.管理系统的文件资源D.执行应用程序代码2.下列哪种编程语言常用于嵌入式系统的开发?A.JavaB.PythonC.C/C++(正确答案)D.JavaScript3.嵌入式Linux系统中,用于进程间通信的机制不包括:A.管道(Pipe)B.信号(Signal)C.共享内存(Shared Memory)D.DLL(动态链接库)(正确答案)4.在嵌入式系统开发中,交叉编译是指:A.在目标平台上编译代码以在相同平台上运行B.在一种平台上编译代码以在另一种平台上运行(正确答案)C.使用多种编译器同时编译代码D.编译代码时跳过某些优化步骤5.关于嵌入式系统的中断处理,以下说法错误的是:A.中断是硬件或软件发出的信号,用于请求CPU的注意B.中断向量表用于存储中断服务程序的地址C.中断服务程序是响应中断而执行的代码D.中断处理过程中,CPU不会保存当前正在执行的程序的上下文(正确答案)6.在嵌入式Linux开发中,Makefile文件的主要作用是:A.定义项目的编译规则(正确答案)B.描述项目的文档结构C.存储项目的源代码D.指定项目的版本信息7.下列哪项不是嵌入式系统低功耗设计的方法?A.使用低功耗的硬件组件B.优化软件算法以减少CPU的使用率C.增加系统的时钟频率以提高性能(正确答案)D.在不需要时关闭设备的电源8.关于嵌入式系统的实时性,以下说法正确的是:A.实时系统是指系统能够在任意时间内响应外部事件B.实时系统不需要保证任务在规定的时间内完成(正确答案)【注:此题表述有误,实际上实时系统需要保证任务在规定的时间内完成,但此处按照题目要求标注“正确答案”于错误选项,实际正确选项应为能体现实时系统确保任务按时完成的描述】C.硬实时系统要求所有任务都必须在规定的时间内完成D.软实时系统允许某些任务偶尔错过其截止时间。
嵌入式工程师笔试题目

嵌入式工程师笔试题目嵌入式工程师是指具有C/C++语言、汇编语言等基础,熟悉模拟电子技术等硬件知识,了解处理器体系结构,做嵌入式系统设计和开发,包括硬件系统的建立和相关软件开发、移植、调试等工作的人,下面就是小编整理的嵌入式工程师笔试题目,请看:嵌入式工程师笔试题目【1】1、一根金条长31厘米,如果把它切成数段,使其中的一段或几段能够接成长为1到31中任何整数的金条,请问要切几次?A.4B.5C.6D.7参考答案:A2、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?A.SpinLockB.MutexC.SemaphoreD.Condition variable参考答案:A3、以下程序输出的结果是()#includeint main(){int x=10,y=10;printf("%d %d",x--,--y);}A.10 10B.9 9C.9 10D.10 9参考答案:D4、下面所述步骤中,不是创建进程所必须的步骤是?A.由调度程序为进程分配CPUB.建立一个进程控制块C.为进程分配内存D.将进程控制块链入就绪队列参考答案:A5、下面描述中,表达正确的有()A.公有继承是基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的C.公有继承是基类中的protected成员在派生类中仍是protected的D.私有继承是基类中的public成员在派生类中仍是private的参考答案:ACD6、int listen(SOCKET s, int backlog);该函数中第二个参数的含义是?A.是否打开log信息B.是否打开后台log信息C.后台等待连接队列的最大限制值D.后台等待连接队列的最小限制值参考答案:C7、Java程序中的类名称必须与存放该类的文件名相同。
嵌入式软件工程师笔试题

嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串1、c51单片机的串口异步通信和同步通信的区别,说说他们的优缺点。
2、C51单片机的数据总线和地址总线是如何复用的,说明原理。
3、C51单片机的绝对寻址范围是多少k?4、说明下面的寻址方式(1)MOV A , #30H (2)MOV A,@R0(3)ADD A , R4 (4)MOV A+@DPTR 5、写出下面分别是什么指针?(1)int *a[10]; (2)int (*a)[10];(3)int (*P)(int) ; (4)int (*a[10])(int);6、void swap(int a,int b){int temp;temp = a;a=b;b=temp;}main(void){int x="3",y=4;swap(x,y);}问上面程序执行完后x= ?,y=?7、typedef struct test{int i;short s;char c;union{int a;short b;}}example ;int y ;y = sizeof(example);请问在TC环境下,y=?8、编程实现数组的逆置,例如,“hello,world!”逆置后为“!dlrow,olleh”。
9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。
10、冯诺依曼结构的计算机由哪几部分组成?11、说说程序,进程,线程的区别。
12、说说你怎样理解程序= 数据+ 结构+ 算法13、根据函数原型编程实现一个数组,按从大到小的冒泡排序。
void tibbule(int a[],int n);//a[]为数组,n为数组长度14、OSI有哪几层?tcp/ip包括哪几层?15、编程实现一个双链表的节点插入和删除。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)1什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
2 char * const p char const * p const char *p 上述三个有什么区别?答案:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p3char 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;out < < ( str7 == str8 ) < < endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
4以下代码中的两个sizeof用法有问题吗?[C易]void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母{for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i )if( 'a' <=str[i] && str[i] <='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout < < "str字符长度为: " < < sizeof(str)/sizeof(str[0]) < < endl;UpperCase( str );cout < < str < < endl;答案:函数的sizeof有问题。
根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,因此其大小为6,因为还有'\0',函数的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
5一个32位的机器,该机器的指针是多少位答案:指针是多少位只要看地址总线的位数就行了。
80386以后的机子都是32的数据总线。
所以指针的位数就是4个字节了。
6 main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}答案:2 5分析:*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 。
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下:&a是数组指针,其类型为int (*)[5]; 而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a是长度为5的int数组指针,所以要加5*sizeof(int) 所以ptr实际是a[5] 但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*)。
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].7请问以下代码有什么问题:int main(){ char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}答案:没有为str分配存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行存读写而导致程序崩溃。
8Char * s="AAA";printf("%s",s);s[0]='B';printf("%s",s); 有什么错?答案:"AAA"是字符串常量。
s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA"; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
9写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
答案:.#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有‘;’10 嵌入式系统中经常要用到无限循环,你怎么用C编写死循环?答案:while(1){}或者for(;;)11 关键字static的作用是什么?答案:定义静态变量或静态函数12 关键字const有什么含意?答案:表示常量不可以修改的变量。
13 关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。
(1)并行设备的硬件寄存器(如状态寄存器)(2)中断函数中会访问到的非自动变量(3)多线程应用中被几个任务共享的变量14 int (*s[10])(int) 表示的是什么啊?答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
15 有以下表达式:int a=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 = a - b; a = a - b;或者 a = a^b;// 只能对int,char.. b = a^b; a = a^b; or a ^= b ^= a;17 c和c++中的struct有什么不同?答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct 可以。
c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private18.#include <stdio.h>#include <stdlib.h>void getmemory(char *p){p=(char *) malloc(100);strcpy(p,"hello world");}int main( ){char *str=NULL;getmemory(str);printf("%s/n",str);free(str);return 0;}答案:程序崩溃,getmemory中的malloc 不能返回动态存,free()对str操作很危险19char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?答案:长度不一样,会造成非法的OS20 列举几种进程的同步机制,并比较其优缺点答案:原子操作信号量机制自旋锁管程,会合,分布式系统21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础22.进程死锁的原因答案:资源竞争及进程推进顺序非法23.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路24.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁25.操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个27.纯虚函数如何定义?使用时应注意什么?答案:virtual void f()=0; 是接口,子类必须要实现28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变29.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?答案:应用层表示层会话层传输层网络层链路层物理层;tcp /udp属于传输层;TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与TCP 不同,UDP 并不提供对IP 协议的可靠机制、流控制以及错误恢复功能等。
由于UDP 比较简单,UDP 头包含很少的字节,比TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是大,冗余性不好udp: 不提供稳定的服务,小,开销小30:(void *)ptr 和(*(void**))ptr的结果是否相同?其中ptr为同一个指针答案:.(void *)ptr 和(*(void**))ptr值是相同的31:int main(){int x=3;printf("%d",x);return 1;}问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。