华为c语言中static的作用,华为C语言面试题

《华为C语言面试题》由会员分享,可在线阅读,更多相关《华为C语言面试题(69页珍藏版)》请在人人文库网上搜索。

1、华为而试题1、局部变量能否和全局变量重名?答:能.局部会屏蔽全局。要用全局变量,需要使用,局部变量可以与全局变量同名,在函数内弓I用这个变量时,会用到同名的局部变量,而不会用到全局变量。対于有些 编译器而言,在同一个函数内町以定义多个同名的局部变量,比如在两个循坏体内都定义一个同名的局部变屋,而那 个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量?答:extern町以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式來引用某个在头文件中声明的全局变理, 假定你将那个编写错了,那么在编译期间会报错,如果你用exbm方式引用时,假定你犯了同样的错i吴,那么。

2、在编译 期间不会报错.而在连接期间报错。3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量前提是英中只能有一个C文件中对此变量赋初值,此时连接不会出错4、请写出下列代码的输出内容#include int main(void)int a,b,cda=10,b=a+,c=H-+a;d=10*a+,printf(b, c. d: %d, %d, %d,b, c d), return 0.答:10, 12, 1205、static全局变量与普通的全局变量有什么区别? static 局部。

3、变量和普通局部变量有什么区别? static函数与普通函数有什么区别?答1)全局变量(外部变量)的说明之前再冠以static就构成了第态的全局变最。全局变量本身就是静态存储方式,静 态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文 件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函 数公用,因此可以避免在其它源文件中引起错误。2)从以上分析可以。

4、看出,把局部变量改变为静态变最后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变最后是改变了它 的作用域,限制了它的使用范伟I。3)static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应 该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的 源文件要包含这个头文件综上所述static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用,static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一。

5、次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只冇-份,普通函数在每个被调用中维持一份拷贝6、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。7、设有以下说明和定义:typedef unionlong i,int k5,char ctDATE,struct datamt cat,DATE cow,double dog,too,DATE max,则语句 pnntf(%d-,sizeof(sti*uct datasizeof(max),的执行结果是: 52考点:区别struct与union (-般假定在32位机器上)答:D。

6、ATE足一个union,变量公用空间.里面最大的变量类型是int5,占用20个字节.所以它的大小是20 data是一 个 struct,每个变量分开占用空间 依次为int4 + DATE20 + doubles = 32所以结果是20+32 = 52当然在某些16位编辑器b; int町能是2字节,那么结果是HitZ+ DATE10 +doubles = 20、队列和栈有什么区别?队列先进先出,栈后进先出9、写出下列代码的输出内容#niclude int inc(int a) retum(+a), mt multi(int*a, int*b, mt*c) retum(*c=*a*b), type。

7、def mt(FUNCl)(int in),typedef int(FUNC2) (int*,int*,int*), void shov/(FUNC2 funt argl, int*arg2) FUNCI p=&incint temp =p(argl),Rin(&temp,&argl, arg2),printfCdii1 ,*arg2),mainOint a,局部变量a为0,show (multiretuixi 0,答:11010、请找出下面代码中的所有错误(题目不错,值得一看)说明:以下代码是把一个字符串倒序.如“abed”倒序后变为“deba#uiclude stnnghmainOchar。

8、*si*c= hello.world tchar* dest=NULL,int len=sti4en(src),dest=(char*)maIlocQen),char* d=dest,char* s=srclenLwhile(len1=0)d+=s,printfC%sdest);return 0,答:方法1: 一共有4个错误,int mainOchar* src = hello,world-,int len = stiden(src),char* dest = (chai*)ma lloc(len+1),/要为分配一个空间char* d = dest,char* s = &srclen-l,指。

9、向最后一个字符while( len 1=0)d+=*s-;*d = 0,尾部要加0pnntf(%sn Rest).fi-ee(dest),/使用完,应当释放空间,以免造成内存汇泄露dest = NULL,防止产生野指针return 0,方法2:(方法一需要额外的存储空间,效率不高)不错的想法#include #include mainOchar stilJ-ello,world11,mt len=stilen(str);char t;foiint i=0, ii+)ajlM=O,答:把循坏语句内外换一卞2 #define Max_CB 500void LmiQueryCSmd(Struct M。

10、SgCB * pmsg)unsigned chai ucCmdNum,for(ucCmdNum=0,ucCmdNum(Y)?(Y)X) /结尾没有,abcM,char *str7 = M abc11,char *str8 = abc11,cout ( strl = sti2 ) endl,cout ( str3 = str4 ) endl,cout ( str5 = str6 ) endl,cout ( str7 = str8 ) endl,结果是:00 1 1解答:Strl,str2,sti3,str4是数组变量,它们有各自的内存空间:而sti-5,str6,sti-7,str8是指针,它们。

11、指向相同的常屋区域。4以下代码中的两个sizeof用法有问题吗? C易void Uppei*Case( chai str )/将str中的小写字母转换成人写字母for( size_t i=0, iMhello,),pnntf(str).return 0,答;没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致 程序崩溃。Strcpy的在库函数stnngh中程序的主要错谋在于越界进行内存读写导致程序屈溃/2)char* sAAA,printf(%s ,s),sO=*B:printf(%s ,s),有什么错?答。

12、-AAA11是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosnt char* s=AAA;然后又因为是常最,所以对是s0的赋值操作是不合法的。 1 嵌入式系统中经常要用到无限循环,你怎么用C编写死循坏。答:while(l)或者fort,)前面那个较好关键字static的作用是什么?答D定义静态局部变量,作用域从函数开始到结束.2) 在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范出被限制在声明它的模块内:3) 在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝4、关键字const有什么含意?答:1)表示常量不町以修改的。

13、变量。2) 可以修饰参数,作为输入参数.3) 修饰函数,防止以外的改动.4) 修饰类的成员前数,不改变类中的数据成员5、关键字volatile有什么含意?并举出三个不同的例子?答提示编译器对象的值可能在编译器未监测到的情况卜 改变。例子:硬件时钟,多线程中被多个任务共享的变量等6 int (*sl O)(int)表示的是什么啊int(*s10)(int)函数捋针数组,每个指针指向一个int func(intparam)的函数。1有以卜表达式:int a=24& b=4,uit const c=21,const int *d=&a,int *const e=&b,mt const *f cons。

14、t =&a,请问下列表达式哪些会被编译器禁止?为什么?答 *c=3 2, d=&b, *d=43, e=34, e=&a, f=0x3 21 f,*c这是个什么东东,禁止*d说了是const,禁止e = &a说了是const禁止const *f const =&a,禁止2交换两个变量的值,不使用第二个变量。即a=3,b=5,交换之后a=5,b=3,答有两种解法,一种用算术算法,一种用“异或)a = a #mclude void getmemory(char *p) p=(char ) malloc(l 00);int main()char *str=NULL,getmemory(str),sb。

15、rpyCp,hello world1),printfCs/nstr),fieeCstr),return 0,答 程序崩溃,getinemoiy中的malloc不能返回动态内存,free ()对str操作很危险5 char szsti%10,strcpy (szstr012345 6789),产生什么结果?为什么?答,正常输出,长度不一样,会造成非法的OS,覆盖别的内容6列举几种进程的同步机制,并比较其优缺点。答原子操作信号量机制自旋锁管程,会合,分布式系统7进程之间通信的途径答共享存储系统消息传递系统管道:以文件系统为基础面试经典试题silvei-6 | 02 一月,2007 11 41面试经。

16、典试题Autlior: Vince即使你是个编程高于,你在面试前也应该要看看这套题,她也许会给你带來好运,否则你有町能后悔当初为 什么没有看而跳楼自杀,这样我会很内疚的。这套题看似简单,但你未必能得高分,即使你看不懂也要把她背u来! 欢迎转載此文,转载时请注明文章来源:文斯测试技术硏究中心http /blog csdn net/vincetest1编程基础1.1基本概念1 const的理解:const chai*, char const*, char*const的区别问题几乎是C+面试中每次 都会有的题目。爭实上这个概念淮都有只是三种声明方式非常柑似很容易记混。Bjame在他的The C+Pr。

17、ogramming Language里面给 出过一个助记的方法: 把一个声明从右向左读。char const cp, ( 读成 pouiter to )cp is a const pointei to cliarconst char *p,p is a pointei to const char,char const * p,同上因为C卄里而没冇const*的运算符,所以const只能属于前面的类型。2. c指针int*pn;-指针数组,每个元素均为指向整型数据的指针。mt (*p)n,p为指向一维数组的指针,这个一维数组有n个整型数据。int*pO,函数带回指针,指针指向返回的值。int (。

18、*p)0,-P为指向函数的指针。3. 数组越界问题(这个题目还是有点小险的)下面这个程序执行后会有什么错误或者效果#define MAX 255int mainf)unsigned char ANlAX,i,for (i=0,k=MAX,i-h-)A=i,解答:MAX=255,数组A的卜标范闱为:0 MAX-1,这是其一,其二当1循坏到255时,循坏内执行:A(255=255,这句本身没仃问题,但是返回for (i=O,isizeof(a),memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a100,b50,memcpy(b, a,sizeof。

19、(b),注总:如用sizeof(a),会造成b的内存地址溢出。strcpy就只能拷贝字符串了,它遇到V就结束拷贝;例:chara100,b50,strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个40*之前)是否超过50位,如超过,则会造 成b的内存地址溢出。strcpy原型:extern char strq)y(char dest.char six),AS SERT (dest I =NULL)& &(src I =NULL),Char address = dest,While(*dest-H-=*src+4-)! 0)Continue,Return dest,。

20、用法:#include 功能:把src所指由NULL结束的字符串复制到dest所捋的数组中。说明:src和dest所指内存区域不可以审叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:extern void *memqy(yoid *dest, void *src, unsigned int count),AS SERT (dest! =NULL)&(src i=NULL),ASSERT(destsi-c+count)|(si-cdest+couiit),/防止内存重叠,也可以用 restrict 修饰指针Byte* bdest = (Byte*)de。

21、st,Byte* bsi-c = (Byte*) src,While(couiit-0)*bdest+ = bsic-H-,Return dest,用 法:#include 功能:rfl src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。Memset原型:extern void *memset(void *buffer, char c, int count),用法:#include功能;把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。5 ASSERT0是干什么用的答。

22、ASSERT0是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执hJnlfll的语句。这个农通常原來判斯程庁:小是否出现了明 显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如 果为0可能导致错误,你可以这样写程序:ASSERT(n!=0),k= 10/n,ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。assert。的功能类似.它是ANSI C标准中规定的函数.它与ASSERT的一个重要区別是町以用在Rel。

23、ease版本中。6 system (pause),作用?答系统的暂停程序,按任意键继续,屏幕会打印,按任意键继续省去了使用getchar ();7请问C卄的类和C里面的struct有什么区别?答ch中的类典有成员保护功能,并且具有继承,多态这类oo持点,而c里的struct没有c里面的struct没有成员函数,不能继承,派生等等8请讲一讲析构函数和虚函数的用法和作用?答析构隨数也是特殊的类成员肉数,它没有返回类型,没有参数,不能随意调用,也没有审戟。只是在类对象生命期 结束的时候,由系统口动调用释放在构造函数中分配的资源。这种在运行时,能依据其类型确认调用那个函数的能力 称为多态性,或称迟后联。

24、编。另:析构函数一般在对象撤消前做收尾工作,比如回收内存等工作,虎拟惭数的功能是使子类可以用同名的函数对父类函数进行覆盖,并H在调用时自动调用子类覆盖函数,如果是纯虎 因数,则纯粹是为了在子类覆孟时有个统一的命名而已。注意子类重新定义父类的虚函数的做法叫覆盖override,而不是overload(重载),重载的概念不属于面向对象编程,重载指 的是存在多个同名怖数,这些函数的参数表不同笊载是在编译期间就决定了的,是静态的,因此,甫载与多态无关与面向 对彖编程无关.含村纯虎函数的类称为抽象类,不能实例化对象,主要用作接I I类/9全局变最和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么。

25、知道的?答,全局变最的生命周期是整个程序运行的时间,而局部变最的生命周期则是局部函数或过程调用的时间段。其实现是 由编译器在编译时采用不同内存分配方法。全局变量在main函数调用后,就开始分配,静态变量则是在mam函数前就已经初始化了。局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)10 8086是多少位的系统?在数据总线上是怎么实现的?答8086系统是16位系统,其数据总线是20位。12程序设计1编写用C语言实现的求n阶阶乘问题的递归算法:答 long int fact(int n)If(n=0|n=l)Return 1,ElseReturn n*fact(n-l),。

26、2. 二分査找算法:1)递归方法实现:int BSeaich(elemtype a,elemtype x,int low,int high)M在下届为low.上界为high的数组a中折半查找数据元素x/int mid,if(lowhigh) return -1, mid=(low+hi gh)/= if(x=amid) return mid, if(xl f(n)=f(n-l)+f(n-2) n2 解;非递归算法: int f(int n)int i,s,sl,s2, sl=l,/*sl用于保存f(n-l)的值*/ s2=l,/*s2用于保存f(n-2)的值*/ s=l,for(i=3i-f(。

27、n-2),4. 交换两个数,不用第三块儿内存:答int a ,mt b =;a = a + b,b = a b;3 = a - b,5. 冒泡排序:答 void Bubblesort(elemtype x,intn) 时间复杂度为 0(n*n), mt i,j,elemtype temp,for(i=l,ixj+l key)temp=xj,xjnj+1,kj 1 =temp,补充一个改进的冒泡算法:void Bubblesoit(elemtype x,intn)Int i,j,BOOL exchange, /记录交换标志foi=i,-j)xO=xj,Xj=xj+1,Xj+l=xO,Exchan。

28、ge = true,发生了交换,设豐标志为真一if(iExchange)为发生替换,提前终止算法return,6 c语言文件读写#uiclude stdio h-mainOFILE *fp,char ch,filename10scanf(%s .filename),i f(fp=fop en(filename,B w )=NULL)printfCcamit open filen),exit(O);ch=getchai*O,whileCchi-#1)fputc(ch,fp),putchai#include void mainOWORD wVeisioiiRequested, 版本号WSADATA。

29、 wsaData.数据int eir,wVeisionRequested = MAKE WORD (1 tl),eiT = WSAStartupCwVeisionRequested.&wsaData),if( ar != 0)return,if(LOB YTE( wsaData wVersion ) 1= 1|HIB YTE( wsaTata wVereion) 1= 1)WSACleanupO,return,SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0)建立套接字SOCKADDR_IN addrSrv,addrSrv. sin_addr S_un S。

30、_addr=htonl(JNADDR_ANY),addrSrv sin_family=AF_INET,addrSrv sin_p ort=htons(6000),bind(sockSiv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR), 绑定端I Ilisten(sockSrv,5), 转换socket套接子为侦听套接子SOCKADDR_IN addrClient,mt len=sizeof(SOCKADDR),while(l) 无限循坏SOCKET sockConn=accept(sockSiv,(SOCKADDR*)&addrClient,&len),char s。

31、endBuf 100,spinntCsendBuf,1 Welcome %s to http /www sunxui org,met_ntoa(addi*Client sin_addiO),send(sockC oiin,sen dBuf,sb4en(sendBuf)+1,0),char recvBuf 100,recv (sockConn,recvBuf),printf(M%snB ,recvBuf),closesocket(sockConn),WSACleanupO,注:这是 Server 端:File-New-Win32 Console Application, T 程名:TcpSrv:。

32、然后,File-New-C+Souice File 文件名:TcpSrv;在该匚程的 Setting 的 Link 的 Object/hbrary modules 项要加入 ws2_32 lib #mclude #mclude void main。WORD wVeiionRequested,WSADATA wsaData,int err,wVersionRequested = MAKE WORD (1,1),eiT = WSAStaitupCwVersionRequested.&wsaData), 启动 winsock Dllif( err != 0)return,if(LOBYTE( wsa。

33、Data wVersion ) i= 1|HIBYTE( wsaEata.wVeision) != 1)WSACleanupO,return,SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0),SOCKADDRJN addrSrv,addrSrv sin_addrS_un S_addr=inet_addr( 127.0 0 1M)addrSiv sin_family=AF_INET,addrSrv sin_port = htons(6000),connectCsockClientXSOCKADDR*)&addrSrv,sizeof(SOCKADDR)。

34、.char recvBufllOO,recvCsockClientrecvBuf, 100,0),printf(M%snB ecvBuf);sendCsockClient/This is zhangsan11,strlen(This is zhangsan) 1,0);closesocketCsockClient),WSACleanupO,注:这是 Client 端;File-New-Win32 Console Application.匸程名:TcpChent;然后,File-New-C+Souice File,文件名:T卬Client;同理,在该匸程的 Setting 的 Link 的 Ob。

35、ject/libraiymodules 项要加入 ws2_32.1ib8类的知识(非常不错的一道题目)C+ +#mclude viostrwam hclass humanpublic:human0 human_num+, /默认构造函数static int humanjium, 静 态成员-huinanOhumanjium-,printO,void pnntO/couthuman num is 11 human jiuinendlprotectedprivate,int human :human_num = 0, 类中静态数据成员在外部定义,仅定义一次human fl (human x)x p。

36、nntOreturn x,int main(int argc, char* ai*gv)human h 1, 调用默认构造函数,human_num变为1hl printO, / 打印 Humanjnan:lhuman h2 = fl (hl), 先调用函数 fl输出 human_num 1,而后输出 human_num 为 0.h2 printO,/JT 印输出:human_num 0return 0, 依次调用两个析构函数输出humannum:-1 ,human_num -2;输出:1100分析:human hl, 调用构造函数,humjium = 1,hl printO, 输出:human。

37、 is 1humanh2 = fl(hl),/W调用fl(hl)的过程中,由于函数参数是按俏传递対象,调用默认的复制构造函数垃并没有调用定义 的构造函数C/C+程序设计员应聘常见面试试题深入剖析silver6 | 25 九月,2006 09 07本文的写作冃的并不在于提供C/C+程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的人多数面试题 来自各人论坛,部分试题解答也参考了网友的意见。许多面试题看似简单,却需要深片的基本功才能给出完美的解答。企业要求面试者写-个最简单的strcpy函数都町看 出面试者在技术上究竞达到了怎样的程度,我们能真正写好一个strcpy P数吗?我们都觉得自己。

38、能,可是我们写出的 strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的丿z:次。此外,还有一些面试题考查面试者敏捷的思维能力。 分析这些而试题,本身包含很强的趣味性:而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身 的内功。2找错题试题1:void test 10char stimg10,char* strl =0123456789,sticpy( string, strl ),试题2:void testZOchar string 10, strl10,int 1,for(i=0, K10, n i)strl =strcpy( string, strl );试题3:void tests (char* strl)char stnng10,if( strlen( strl ) = 10 ) strcpy( string, strl ), 解答:试题1字符串strl需要11个字节才能存放下(包括末尾的),而string只有10个字节的空间,strcpy会导致数组越 界:对。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值