C,C++语言笔试面试中常见问题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

阿尔卡特朗讯(中国)C语言面试题(2009-2-2014:49:00)据说是阿尔卡特(中国)的面试题目阿尔卡特C语言面试题阿尔卡特C语言面试题全部用C语言完成:1.自己定义数据结构,写出程序:在一个单向链表中,往I位置插入一个节点。2.自己定义数据结构,写出程序:二叉树的前序遍历。3.不允许使用系统时间,写出一个随机数生成函数。的用法,在C,C++语言笔试面试中常见问题收藏很常见的一些问题,但是很多时候不会!这里只总结一些最常用的(32位编译环境):1,基本数据类型coutsizeof(char)endl;结果是1coutsizeof(int)endl;结果是4coutsizeof(unsignedint)endl;结果是4coutsizeof(longint)endl;结果是4coutsizeof(shortint)endl;结果是2coutsizeof(float)endl;结果是4coutsizeof(double)endl;结果是82,指针变量指针变量的sizeof的值与指针所指的值没有任何关系,所以指针变量的内存大小都是相等的,如:int*a;char*b=abc;char**c=&b;sizeof(a)==sizeof(b)==sizeof(c)==4;但是sizeof(*a)=4;sizeof(*b)=1;sizeof(*c)=4;sizeof(**c)=1;3,数组的大小数组的sizeof值等于数组所占用的内存字节数chara1[]=abc;inta2[3];sizeof(a1);//结果为4,字符末尾还存在一个NULL终止符sizeof(a2);//结果为3*4=12(依赖于int)但是,当数组作为函数参数的时候呢?这时候,数组是传地址的,即这时用指针来处理,所以,如果有:voidfoo(chara[]){intb=sizeof(a);//c==4}所以,这时候,a的类型为char*,而sizeof(char*)==4;4,联合体和结构体联合体:uniona{inta;charb;floatc;};由于联合体公用储存空间,所以只取最大的来计算联合体占用空间,这里sizeof(a)==4;结构体:比较麻烦,注意3点:1,首地址应为结构中最宽成员的倍数,守成员都是02,整个结构体长度应为最宽成员的倍数3,把单一元素看成结构体如,structa{doublea;charb;intc;};sizeof(a)==8+1+3+4==12;这里,先分配double,首地址为8的倍数0,再分配char,这时其偏移量为8,为1的倍数,再分配int,其偏移量为9,不是4的倍数,应该用3个空字节补齐,所以int的偏移为9+3=12,再加上4=16,这时16为最宽成员8的倍数,所以该结构体的长度为16。当结构体中包含结构体时,最宽成员不包括内部结构体,最宽成员应从这两个结构体的基础成员中去找。structa{chara;intb;};sizeof(a)==8;sturctb{chara;ab;charc};sizeof(b)==16;把内部结构体打开来看,分配char为1,再分配a,a中最宽成员为4,则其起始偏移应为最宽的倍数,1+3=4,4+8=12,再分配char,这时,其偏移为12,是char的倍数,12+1=13,根据规则2,再用3来补齐,13+3=16,是int的倍数,所以结构体b的长度为16.5,类的sizeof大小1,空类大小为12,虚函数大小为4,构造析构不算大小3,类大小等于所有数据成员大小之和4,继承中类大小等于父类和子类的数据成员大小之和本文来自CSDN博客,转载请标明出处:://zhidao.baidu.com/question/110881469.html?fr=ala0://wenku.baidu.com/view/761bb4d8ce2f0066f533221c.html语言常见面试过程中的笔试题2嵌入式开发吧2010-03-1118:01:24阅读74评论0字号:大中小订阅1、用变量a给出下面的定义a)一个整型数(Aninteger)b)一个指向整型数的指针(Apointertoaninteger)c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger)d)一个有10个整型数的数组(Anarrayof10integers)e)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger)a)inta;//Anintegerb)int*a;//Apointertoanintegerc)int**a;//Apointertoapointertoanintegerd)inta[10];//Anarrayof10integerse)int*a[10];//Anarrayof10pointerstointegersf)int(*a)[10];//Apointertoanarrayof10integersg)int(*a)(int);//Apointertoafunctionathattakesanintegerargumentandreturnsanintegerh)int(*a[10])(int);//Anarrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger2、关键字volatile有什么含意?一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。3、const符号常量;(1)constchar*p(2)charconst*p(3)char*constp说明上面三种描述的区别;如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。(1)constchar*p一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如:constchar*p;charc1='a';charc2='b';p=&c1;//okp=&c2;//ok*p=c1;//error(2)charconst*p(3)char*constp这两个好象是一样的,此时*p可以修改,而p不能修改。4、简答题(1)、头文件中的ifndef/define/endif干什么用?答:防止该头文件被重复引用。(2)、#includefilename.h和#include“filename.h”有什么区别?答:对于#includefilename.h,编译器从标准库路径开始搜索filename.h对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h(3)、const有什么用途?(请至少说明两种)答:(1)可以定义const常量,(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。(4)、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。5、编写strcpy函数已知strcpy函数的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数strcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(strSrc!=NULL));char*address=strDest;//2分while((*strDest++=*strSrc++)!=‘\0’)NULL;returnaddress;//2分}(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?答:为了实现链式表达式。//2分例如intlength=strlen(strcpy(strDest,“helloworld”));6.编写用C语言实现的求n阶阶乘问题的递归算法:longintfact(intn){intx;longinty;if(n0){printf(error!);}if(n==0)return1;x=n-1;y=fact(x);return(n*y);}7链表题:一个链表的结点结构structNode{intdata;Node*next;};typedefstructNodeNode;已知链表的头结点head,写一个函数把这个链表逆序(Intel)Node*ReverseList(Node*head)//链表逆序{if(head==NULL||head-next==NULL)returnhead;Node*p1=head;Node*p2=p1-next;Node*p3=p2-next;p1-next=NULL;while(p3!=NULL){p2-next=p1;p1=p2;p2=p3;p3=p3-next;}p2-next=p1;head=p2;returnhead;}几个C语言排序算法C/C++2010-10-2516:51:42阅读5评论0字号:大中小订阅首先先介绍排序:1,大家都知道的冒泡排序:#include#includeusingnamespacestd;templatevoidswap(typex[],int,int);templatevoidBubbleSort(typex[],int);intmain(){srand(time(0));constintn=10;intx[n];for(inti=0;ix[i]=rand()%99;for(inti=0

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功