




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IT面试笔试题全集_史上最全_C篇2_RAIN系列编写类SING的构造函数、析构函数和赋值函数_追雨制作已知类SING的原型为CLASSSINGPUBLICSINGCONSTCHARSNULL/普通构造函数SINGCONSTSINGAMPOTHER/拷贝构造函数SINGVOID/析构函数SINGAMPOPERATECONSTSINGAMPOTHER/赋值函数PRIVATECHARM_DATA/用于保存字符串请编写SING的上述4个函数。标准答案/SING的析构函数SINGSINGVOID/3分DELETEM_DATA/由于M_DATA是内部数据类型,也可以写成DELETEM_DATA/SING的普通构造函数SINGSINGCONSTCHARS/6分IFSNULLM_DATANEWCHAR1/若能加NULL判断则更好M_DATA0ELSEINTLENGTHSLENSM_DATANEWCHARLENGTH1/若能加NULL判断则更好SCPYM_DATA,S/拷贝构造函数SINGSINGCONSTSINGAMPOTHER/3分INTLENGTHSLENOTHERM_DATAM_DATANEWCHARLENGTH1/若能加NULL判断则更好SCPYM_DATA,OTHERM_DATA/赋值函数SINGAMPSINGOPERATECONSTSINGAMPOTHER/13分/1检查自赋值/4分IFTHISAMPOTHERRETURNTHIS/2释放原有的内存资源/3分DELETEM_DATA/(3)分配新的内存资源,并复制内容/3分INTLENGTHSLENOTHERM_DATAM_DATANEWCHARLENGTH1/若能加NULL判断则更好SCPYM_DATA,OTHERM_DATA/(4)返回本对象的引用/3分RETURNTHISC有关内存的面试题_追雨制作VOIDGETMEMORYCHARPPCHARMALLOC100VOIDTESTVOIDCHARSNULLGETMEMORYSSCPYS,8220HELLOWORLDPRINTFS请问运行TEST函数会有什么样的结果并不能传递动态内存,CHARGETMEMORYVOIDCHARP8220HELLOWORLDRETURNPVOIDTESTVOIDCHARSNULLSGETMEMORYPRINTFS请问运行TEST函数会有什么样的结果因为GETMEMORY返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。VOIDGETMEMORY2CHARP,INTNUMPCHARMALLOCNUMVOIDTESTVOIDCHARSNULLGETMEMORYAMPS,100SCPYS,8220HELLOPRINTFS请问运行TEST函数会有什么样的结果HELLOVOIDTESTVOIDCHARSCHARMALLOC100SCPYS,“HELLO”FREESIFSNULLSCPYS,“WORLD”PRINTFS请问运行TEST函数会有什么样的结果C的几个面试题附带答案_追雨制作1、头文件中的IFNDEF/DEFINE/ENDIF干什么用(5分)2、INCLUDE和INCLUDE“FILENAMEH”有什么区别(5分)对于INCLUDE“FILENAMEH”3、CONST有什么用途(请至少说明两种)(5分)可以修饰函数的参数、返回值,甚至函数的定义体。被CONST4、在C程序中调用被C编译器编译后的函数,为什么要加EXTERN“C”(5分)编译后在库中的名字与CVOIDFOOINTX,INTY编译器编译后在库中的名字为_FOO编译器则会产生像_FOO_INT_INT连接交换指定符号EXTERN循环的优缺点(5FORI0IIFCONDITIONFORI0I缺点多执行了N1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。一套C测试题附带参考答案和分析_追雨制作一、选择题(每小题2分,共12分)1C源文件的缺省扩展名为()AACPPBEXECOBJDLIK2程序运行中需要从键盘上输入多于一个数据时,各数据之间应该使用()符号作为分隔符AA空格或逗号B逗号或回车C逗号或分号D空格或回车3在每个C程序中都必须包含有这样一个函数,该函数的名称为()AAMAINBMAINCNAMEDFUNCTION4假定A为一个短整型(SHORTINT)数组名,则元素A8的地址为BAA4BA8CA16DA325假定AB为一个类,则执行“ABA4,B4,P5”语句时,自动调用该类够造函数的次数为()BA4B5C8D136当需要使用ISSEAM流类定义一个流类对象并联系一个字符串时,应在文件开始使用INCLUDE命令,使之包含()文件AAIOSEAMHBIOMANIPHCFSEAMHDSTSEAH二填空题(每小题3分,共30分)1在C中,函数的参数有两种传递方式,它们是值传递和(址传递)。2当一个成员函数被调用时,该成员函数的(THIS指针)指向调用它的对象。3在公有继承的情况下,基类数据成员在派生类中的访问权限(私有不可以访问,其他同基类一致)。4用NEW申请某一个类的动态对象数组时,在该类中必须能够匹配到(无参)构造函数,否则应用程序会产生一个编译错误。5静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象(共享)。6面向对象的程序设计有四大特征,它们是(封装,多态,继承,抽象)。7在C类中,有一种不能定义对象的类,这样的类只能被继承,称之为(虚基类),定义该类至少具有一个(虚函数)。8在C类中,CONST关键字可以修饰对象和成员函数,CONST对象不能(作为左值)。9假定一个枚举类型的定义为“ENUMRBAB,AC,AD,AEXAD”则X的值为(2)10若需要把一个类AB定义一个类CD的友元素,则应在类CD的定义中加入一条语句为(FRIENDCLASSAB)。三给出下列程序运行后的输出结果(每小题5分,共20分)1下面程序的运行结果是(3)。INCLUDEVOIDMAINCHARA8217A,B8217JFLOATXXBA/8217F8217APRINTFDN,INT314X2下面程序的运行结果是()。INCLUDE8220IOSEAMHVOIDMAININTI1WHILEICLASSAPUBLICACOUTVECSHAPE;VECTORVECSHAPEINTTOTALVECTORVECSHAPEVECTORITERATORVECITINTNTOTAL0FORVECITVECSHAPEBEGINVECITVECSHAPEENDVECITNTOTALVECITAREARETURNNTOTALCLASSANGLEPUBLICSHAPEPUBLICTRANGLEANGLEINTAREAPRIVATEINTM_NHEIGHINTM_NWIDTH/求三角形面积/INTTRANGLEAREARETURNM_NHEIGHM_NWIDTH/2CLASSRECTANGLEPUBLICSHAPEPUBLICRECTANGLERECTANGLEINTAREAPRIVATEINTM_NHEIGHINTM_NWIDTH/求矩形面积/INTRECTANGLEAREARETURNM_NHEIGHM_NWIDTH武汉上海奥佳笔试题面试题_追雨制作1、C语言里的STRUCT与C里的CLASS有何区别2、面向对象有哪些特性3、何时会用到多态如何实现多态4、怎样实现虚函数5、子类覆盖了基类的方分法时,子类如何调用基类的方法6、MFC和SDK是什么关系7、什么是HDC什么是CWND8、如果让你设计一个异形的按钮,你将如何实现谈一下你的思路谈一下你做的项目用到了哪些技术,在这个项目的实现过程中你遇到了哪些问题,到最后你是怎么样解决这些问题从这个项目中你学会了什么如果NULL和0作为空指针常数是等价的,那我到底该用哪一个呢_追雨制作许多程序员认为在所有的指针上下文中都应该使用NULL,以表明该值应该被看作指针。另一些人则认为用一个宏来定义0,只不过把事情搞得更复杂,反而令人困惑。因而倾向于使用未加修饰的0。没有正确的答案。C程序员应该明白,在指针上下文中NULL和0是完全等价的,而未加修饰的0也完全可以接受。任何使用NULL跟0相对的地方都应该看作一种温和的提示,是在使用指针程序员和编译器都不能依靠它来区别指针0和整数0。在需要其它类型的0的时候,即便它可能工作也不能使用NULL,因为这样做发出了错误的格式信息。而且,ANSI允许把NULL定义为VOID0,这在非指针的上下文中完全无效。特别是,不能在需要ASCII空字符NUL的地方用NULL。如果有必要,提供你自己的定义DEFINENUL0如果NULL定义成DEFINENULLCHAR0难道不就可以向函数传入不加转换的NULL了吗_追雨制作一般情况下,不行。复杂之处在于,有的机器不同类型数据的指针有不同的内部表达。这样的NULL定义对于接受字符指针的的函数没有问题,但对于其它类型的指针参数仍然有问题在缺少原型的情况下,而合法的构造如FILEFPNULL则会失败。不过,ANSIC允许NULL的可选定义DEFINENULLVOID0除了潜在地帮助错误程序运行仅限于使用同样类型指针的机器,因此帮助有限以外,这样的定义还可以发现错误使用NULL的程序例如,在实际需要使用ASCIINUL字符的地方。无论如何,ANSI函数原型确保大多数尽管不是全部指针参数在传入函数时正确转换。因此,这个问题有些多余。在使用非全零作为空指针内部表达的机器上,NULL是如何定义的_追雨制作跟其它机器一样定义为0。当程序员请求一个空指针时,无论写“0”还是“NULL”,都是有编译器来生成适合机器的空指针的二进制表达形式。因此,在空指针的内部表达不为0的机器上定义NULL为0跟在其它机器上一样合法编译器在指针上下文看到的未加修饰的0都会被生成正确的空指针。NULL是什么,它是怎么定义的_追雨制作作为一种风格,很多人不愿意在程序中到处出现未加修饰的0。因此定义了预处理宏NULL在和其它几个头文件中为空指针常数,通常是0或者VOID0。希望区别整数0和空指针0的人可以在需要空指针的地方使用NULL。使用NULL只是一种风格习惯预处理器把所有的NULL都还原回0,而编译还是依照上文的描述处理指针上下文的0。特别是,在函数调用的参数里,NULL之前正如在0之前的类型转换还是需要。NULL只能用作指针常数用缩写的指针比较“IFP”检查空指针是否可靠如果空指针的内部表达不是0会怎么样_追雨制作当C在表达式中要求布尔值时,如果表达式等于0则认为该值为假,否则为真。换言之,只要写出IFEXPR无论“EXPR”是任何表达式,编译器本质上都会把它当IFEXPR0处理。如果用指针P代替“EXPR”则IFP等价于IFP0。而这是一个比较上下文,因此编译器可以看出0实际上是一个空指针常数,并使用正确的空指针值。这里没有任何欺骗编译器就是这样工作的,并为、二者生成完全一样的代码。空指针的内部表达无关紧要。布尔否操作符可如下描述EXPR本质上等价于EXPR01或等价于EXPR0从而得出结论IFP等价于IFP0类似IFP这样的“缩写”,尽管完全合法,但被一些人认为是不好的风格怎样在程序里获得一个空指针_追雨制作根据语言定义,在指针上下文中的常数0会在编译时转换为空指针。也就是说,在初始化、赋值或比较的时候,如果一边是指针类型的值或表达式,编译器可以确定另一边的常数0为空指针并生成正确的空指针值。因此下边的代码段完全合法CHARP0IFP0然而,传入函数的参数不一定被当作指针环境,因而编译器可能不能识别未加修饰的0“表示”指针。在函数调用的上下文中生成空指针需要明确的类型转换,强制把0看作指针。例如,UNIX系统调用EXECL接受变长的以空指针结束的字符指针参数。它应该如下正确调用EXECL/BIN/SH,8220SH,8220C,8220DATE,CHAR0如果省略最后一个参数的CHAR转换,则编译器无从知道这是一个空指针,从而当作一个0传入。注意很多UNIX手册在这个例子上都弄错了。如果范围内有函数原型,则参数传递变为“赋值上下文”,从而可以安全省略多数类型转换,因为原型告知编译器需要指针,使之把未加修饰的0正确转换为适当的指针。函数原型不能为变长参数列表中的可变参数提供类型。在函数调用时对所有的空指针进行类型转换可能是预防可变参数和无原型函数出问题的最安全的办法。空指针到底是什么_追雨制作语言定义中说明,每一种指针类型都有一个特殊值“空指针”它与同类型的其它所有指针值都不相同,它“与任何对象或函数的指针值都不相等”。也就是说,取地址操作符038永远也不能得到空指针,同样对MALLOC的成功调用也不会返回空指针,如果失败,MALLOC的确返回空指针,这是空指针的典型用法表示“未分配”或者“尚未指向任何地方”的指针。空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数而未初始化指针则可能指向任何地方。如上文所述,每种指针类型都有一个空指针,而不同类型的空指针的内部表示可能不尽相同。尽管程序员不必知道内部值,但编译器必须时刻明确需要那种空指针,以便在需要的时候加以区分我看到了用指针调用函数的不同语法形式。到底怎么回事_追雨制作最初,一个函数指针必须用操作符和一对额外的括弧“转换为”一个“真正的”函数才能调用INTR,FUNC,FPFUNCRFP而函数总是通过指针进行调用的,所有“真正的”函数名总是隐式的退化为指针在表达式中,正如在初始化时一样。参见问题114。这个推论表明无论FP是函数名和函数的指针RFPANSIC标准实际上接受后边的解释,这意味着操作符不再需要,尽管依然允许。我能否用VOID指针作为参数,使函数按引用接受一般指针_追雨制作不可移植。C中没有一般的指针的指针类型。VOID可以用作一般指针只是因为当它和其它类型相互赋值的时候,如果需要,它可以自动转换成其它类型但是,如果试图这样转换所指类型为VOID之外的类型的VOID指针时,这个转换不能完成。我有一个CHAR型指针正巧指向一些INT型变量,我想跳过它们。为什么如下的代码INTP不行_追雨制作在C语言中,类型转换意味着“把这些二进制位看作另一种类型,并作相应的对待”这是一个转换操作符,根据定义它只能生成一个右值RVALUE。而右值既不能赋值,也不能用自增。如果编译器支持这样的扩展,那要么是一个错误,要么是有意作出的非标准扩展。要达到你的目的可以用PCHARINTP1或者,因为P是CHAR型,直接用PSIZEOFINT但是,在可能的情况下,你还是应该首先选择适当的指针类型,而不是一味地试图李代桃僵。P自增P还是P所指向的变量_追雨制作后缀和操作符本质上比前缀一目操作的优先级高,因此P和P等价,它自增P并返回P自增之前所指向的值。要自增P指向的值,使用P,如果副作用的顺序无关紧要也可以使用P。我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题CHARPPMALLOC10_追雨制作你所声明的指针是P,而不是P,当你操作指针本身时例如当你对其赋值,使之指向别处时,你只需要使用指针的名字即可PMALLOC10当你操作指针指向的内存时,你才需要使用作为间接操作符PH为什么如下的代码INTA100,B100LONGINTCAB不能工作_追雨制作根据C的内部类型转换规则,乘法是用INT进行的,而其结果可能在转换为LONG型并赋给左边的C之前溢出或被截短。可以使用明确的类型转换,强迫乘法以LONG型进行LONGINTCLONGINTAB注意,LONGINTAB不能达到需要的效果。当两个整数做除法而结果赋与一个浮点变量时,也有可能有同样类型的问题,解决方法也是类似的。“序列点”是什么_追雨制作序列点是一个时间点在整个表达式全部计算完毕之后或在|、038038、或逗号运算符处,或在函数调用之前,此刻尘埃落定,所有的副作用都已确保结束。ANSI/ISOC标准这样描述在上一个和下一个序列点之间,一个对象所保存的值至多只能被表达式的计算修改一次。而且前一个值只能用于决定将要保存的值。第二句话比较费解。它说在一个表达式中如果某个对象需要写入,则在同一表达式中对该对象的访问应该只局限于直接用于计算将要写入的值。这条规则有效地限制了只有能确保在修改之前才访问变量的表达式为合法。例如II1合法,而AII则非法这段代码难道不该打印出56吗_追雨制作使用我的编译器,下面的代码INTI7PRINTFDN,II返回49不管按什么顺序计算,难道不该打印出56吗尽管后缀自加和后缀自减操作符和在输出其旧值之后才会执行运算,但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式“完成”按照ANSIC的术语,在下一个“序列点”之前,参见问题37之前的某个时刻进行。本例中,编译器选择使用变量的旧值相乘以后再对二者进行自增运算。包含多个不确定的副作用的代码的行为总是被认为未定义。简单而言,“多个不确定副作用”是指在同一个表达式中使用导致同一对象修改两次或修改以后又被引用的自增,自减和赋值操作符的任何组合。这是一个粗略的定义甚至都不要试图探究这些东西在你的编译器中是如何实现的这与许多C教科书上的弱智练习正好相反正如K038R明智地指出,“如果你不知道它们在不同的机器上如何实现,这样的无知可能恰恰会有助于保护你。”枚举和一组预处理的DEFINE有什么不同_追雨制作只有很小的区别。C标准中允许枚举和其它整形类别自由混用而不会出错。(但是,假如编译器不允许在未经明确类型转换的情况下混用这些类型,则聪明地使用枚举可以捕捉到某些程序错误。)枚举的一些优点自动赋值调试器在检验枚举变量时,可以显示符号值它们服从数据块作用域规则。(编译器也可以对在枚举变量被任意地和其它类型混用时,产生非重要的警告信息,因为这被认为是坏风格。)一个缺点是程序员不能控制这些对非重要的警告有些程序员则反感于无法控制枚举变量的大小。程序运行正确,但退出时却“COREDUMP”了,怎么回事_追雨制作问题程序SUCTLISTCHARITEMSUCTLISTNEXT/这里是MAIN程序/MAINARGC,ARGV8230缺少的一个分号使MAIN被定义为返回一个结构。由于中间的注释行,这个联系不容易看出来。因为一般上,返回结构的函数在实现时,会加入一个隐含的返回指针,这个产生的MAIN函数代码试图接受三个参数,而实际上只有两个传入这里,由C的启动代码传入怎样从/向数据文件读/写结构_追雨制作用FWRITE写一个结构相对简单FWRITE038SOMESUCT,SIZEOFSOMESUCT,1,FP对应的FREAD调用可以再把它读回来。但是这样写出的文件却不能移植参见问题210和203。同时注意如果结构包含任何指针,则只有指针值会被写入文件,当它们再次读回来的时候,很可能已经失效。最后,为了广泛的移植,你必须用“B”标志打开文件移植性更好的方案是写一对函数,用可移植可能甚至是人可读的方式按域读写结构,尽管开始可能工作量稍大。如何向接受结构参数的函数传入常数值_追雨制作传统的C没有办法生成匿名结构值你必须使用临时结构变量或一个小的结构生成函数。C99标准引入了“复合常量”COMPOUNDLITERALS复合常量的一种形式就可以允许结构常量。例如,向假想PLOTPOINT函数传入一个坐标对常数,可以调用PLOTPOINTSUCTPOINT1,2与“指定初始值”DESIGNATEDINITIALIZERSC99的另一个功能结合,也可以用成员名称确定成员值PLOTPOINTSUCTPOINTX1,Y2是否有自动比较结构的方法_追雨制作没有。编译器没有简单的好办法实现结构比较即,支持结构的操作符,这也符合C的低层特性。简单的按字节比较会由于结构中没有用到的“空洞”中的随机数据参见问题210而失败而按域比较在处理大结构时需要难以接受的大量重复代码。如果你需要比较两个结构,你必须自己写函数按域比较。声明SUCTX1和TYPEDEFSUCTX2有什么不同_追雨制作第一种形式声明了一个“结构标签”第二种声明了一个“类型定义”。主要的区别是在后文中你需要用“SUCTX1”引用第一种,而用“X2”引用第二种。也就是说,第二种声明更像一种抽象类新用户不必知道它是一个结构,而在声明它的实例时也不需要使用SUCT关键字。以下的初始化有什么区别_追雨制作以下的初始化有什么区别CHARA8220SINGLITERALCHARP8220SINGLITERAL当我向PI赋值的时候,我的程序崩溃了。字符串常量有两种稍有区别的用法。用作数组初始值如同在CHARA的声明中,它指明该数组中字符的初始值。其它情况下,它会转化为一个无名的静态字符数组,可能会存储在只读内存中,这就是造成它不一定能被修改。在表达式环境中,数组通常被立即转化为一个指针参见第6章,因此第二个声明把P初始化成指向无名数组的第一个元素。为了编译旧代码,有的编译器有一个控制字符串是否可写的开关。对于没有初始化的变量的初始值可以作怎样的假定_追雨制作对于没有初始化的变量的初始值可以作怎样的假定如果一个全局变量初始值为“零”,它可否作为空指针或浮点零具有“静态”生存期的未初始化变量即,在函数外声明的变量和有静态存储类型的变量可以确保初始值为零,就像程序员键入了“0”一样。因此,这些变量如果是指针会被初始化为正确的空指针,如果是浮点数会被初始化为00或正确的类型。具有“自动”生存期的变量即,没有静态存储类型的局部变量如果没有显示地初始化,则包含的是垃圾内容。对垃圾内容不能作任何有用的假设。这些规则也适用于数组和结构称为“聚合体”对于初始化来说,数组和结构都被认为是“变量”。用MALLOC和REALLOC动态分配的内存也可能包含垃圾数据,因此必须由调用者正确地初始化。用CALLOC获得的内存为全零,但这对指针和浮点值不一定有用函数只定义了一次,调用了一次,但编译器提示非法重定义了。什么问题_追雨制作在范围内没有声明就调用可能是第一次调用在函数的定义之前的函数被认为返回整型INT且没有任何参数类型信息,如果函数在后边声明或定义成其它类型就会导致矛盾。所有函数非整型函数一定要必须在调用之前声明。另一个可能的原因是该函数与某个头文件中声明的另一个函数同名。怎样建立和理解非常复杂的声明例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组_追雨制作这个问题至少有以下3种答案1CHARAN2用TYPEDEF逐步完成声明TYPEDEFCHARPC/字符指针/TYPEDEFPCFPC/返回字符指针的函数/TYPEDEFFPCPFPC/上面函数的指针/TYPEDEFPFPCFPFPC/返回函数指针的函数/TYPEDEFFPFPCPFPFPC/上面函数的指针/PFPFPCAN/上面指针的数组/3使用CDECL程序,它可以把英文翻译成C或者把C翻译成英文CDECLDECLAREAASARRAYOFPOINTERTOFUNCTIONRETURNINGPOINTERTOFUNCTIONRETURNINGPOINTERTOCHARCHARA通过类型转换,CDECL也可以用于解释复杂的声明,指出参数应该进入哪一对括号如同在上述的复杂函数定义中EXTERN在函数声明中是什么意思_追雨制作它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中,但在EXTERNINTF和INTF之间并没有实质的区别。SS的简单实现_追雨制作SSS1,S2是一个经常用的函数,他的作用就是在字符串S1中寻找字符串S2如果找到了就返回指针,否则返回NULL。下面是这个函数的一个简单实现STATICCONSTCHAR_SSCONSTCHARS1,CONSTCHARS2ASSERTS2038038S1CONSTCHARPS1,RS2WHILEPWHILEPRIFRRETURNPELSERS2PS1RETURNNULL华为C/C笔试题_追雨制作11WINDOWS是内核级线程么。答见下一题12LINUX有内核级线程么。答线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型“用户级线程”和“内核级线程”。用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象DOS这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似WINDOWS3X的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因I/O而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。WINDOWSNT和OS/2支持内核线程。LINUX支持内核级的多线程13C中什么数据分配在栈或堆中,NEW分配数据是在近堆还是远堆中答栈存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理堆程序运行时动态申请,NEW和MALLOC申请的内存就在堆上14使用线程是如何防止出现大的波峰。答意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。15函数模板与类模板有什么区别答函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。16一般数据库若出现日志满了,会出现什么情况,是否还能使用答只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。17SQLSERVER是否支持行级锁,有什么好处答支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。18如果数据库满了会出现什么情况,是否还能使用答见1619关于内存对齐的问题以及SIZOF的输出答编译器自动对齐的原因为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。华为慧通面试题_追雨制作/华为面试题有1,2,8230一直到N的无序数组,求排序算法,/并且要求时间复杂度为ON,空间复杂度O1,使用交换,而且一次只能交换两个数/评论要使时间复杂度为ON,那一定是特殊数组,否则不可能实现,/题目给出数组为1,2,8230N,那么可以在这上面做文章,把数组的值和数组的下标联系起来,把AI的值给AAI1,比如A35,则把5赋给A51也就是A45,则符合要求了。INCLUDEVOIDMAININTA103,6,8,4,2,9,7,1,5,10/6,3,4,8,2,9,7,1,5,10这个数例不行INTB,IFORI0I10IBAAI1AAI1AIAIBFORI0I10IPRINTFD8220,AIINCLUDEINCLUDEINTPRINTINT,INTINTSWAPINTAMP,INTAMPINTMAININTA,N,ISCANF8220D,AMPNAINTMALLOCN1SIZEOFINTFORI1INIAIIFORI1INISWAPAI,ARANDN1PRINTA,NFORI1INIWHILEAIISWAPAI,AAIPRINTA,NRETURN0INTSWAPINTAMPI,INTAMPJINTTEMPIIJJTEMPRETURN0INTPRINTINTA,INTNINTIFORI1INIPRINTF82204D,AIPRINTF8220NRETURN0/惠通面试题两个字符串,S,T把T字符串插入到S字符串中,S字符串有足够的空间存放T字符串VOIDINSERTCHARS,CHART,INTIVOIDINSERTCHARS,CHART,INTICHARQTCHARPSIFQNULLRETURN/子串为空WHILEP821708242P/移到目标串串尾WHILEQ821708242PQPQ/插入P821608242函数指针的定义是什么_追雨制作顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子A,CHARFUN1CHARP1,CHARP2B,CHARFUN2CHARP1,CHARP2C,CHARFUN3CHARP1,CHARP2数组参数等效的指针参数数组的数组CHARA34数组的指针CHARP10指针数组CHARA5指针的指针CHARP看看上面三个表达式分别是什么意思C)这很容易,FUN3是函数名,P1,P2是参数,其类型为CHAR型,函数的返回值为CHAR类型。B也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为CHAR,是个二级指针。AFUN1是函数名吗回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰INT10P;再看看A)表达式与这里何其相似明白了吧。这里FUN1不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。同样,我们把这个表达式改写一下CHARCHARP1,CHARP2FUN1这样子是不是好看一些呢只可惜编译器不这么想INTPNULL和PNULL有什么区别_追雨制作很多初学者都无法分清这两者之间的区别。我们先看下面的代码INTPNULL这时候我们可以通过编译器查看P的值为021500000000。这句代码的意思是定义一个指针变量P,其指向的内存里面保存的是INT类型的数据;在定义变量P的同时把P的值设置为021500000000,而不是把P的值设置为021500000000。这个过程叫做初始化,是在编译的时候进行的。明白了什么是初始化之后,再看下面的代码INTPPNULL同样,我们可以在编译器上调试这两行代码。第一行代码,定义了一个指针变量P,其指向的内存里面保存的是INT类型的数据;但是这时候变量P本身的值是多少不得而知,也就是说现在变量P保存的有可能是一个非法的地址。第二行代码,给P赋值为NULL,即给P指向的内存赋值为NULL;但是由于P指向的内存可能是非法的,所以调试的时候编译器可能会报告一个内存访问错误。这样的话,我们可以把上面的代码改写改写,使P指向一块合法的内存INTI10INTPAMPIPNULL在编译器上调试一下,我们发现P指向的内存由原来的10变为0了;而P本身的值,即内存地址并没有改变。经过上面的分析,相信你已经明白它们之间的区别了。不过这里还有一个问题需要注意,也就是这个NULL。初学者往往在这里犯错误。注意NULL就是NULL,它被宏定义为0DEFINENULL0很多系统下除了有NULL外,还有NUL(VISUALC60上提示说不认识NUL)。NUL是ASCII码表的第一个字符,表示的是空字符,其ASCII码值为0。其值虽然都为0,但表示的意思完全不一样。同样,NULL和0表示的意思也完全不一样。一定不要混淆。另外还有初学者在使用NULL的时候误写成NULL或NULL等。这些都是不正确的,C语言对大小写十分敏感啊。当然,也确实有系统也定义了NULL,其意思也与NULL没有区别,但是你千万不用使用NULL,这会影响你代码的移植性。为什么会有内存对齐_追雨制作字,双字,和四字在自然边界上不需要在内存中对齐。(对字,双字,和四字来说,自然边界分别是偶数地址,可以被4整除的地址,和可以被8整除的地址。)无论如何,为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。一个字或双字操作数跨越了4字节边界,或者一个四字操作数跨越了8字节边界,被认为是未对齐的,从而需要两次总线周期来访问内存。一个字起始地址是奇数但却没有跨越字边界被认为是对齐的,能够在一个总线周期中被访问。某些操作双四字的指令需要内存操作数在自然边界上对齐。如果操作数没有对齐,这些指令将会产生一个通用保护异常。双四字的自然边界是能够被16整除的地址。其他的操作双四字的指令允许未对齐的访问(不会产生通用保护异常),然而,需要额外的内存总线周期来访问内存中未对齐的数据。缺省情况下,编译器默认将结构、栈中的成员数据进行内存对齐。因此,上面的程序输出就变成了C100000000,S00000002,C200000004,I00000008。编译器将未对齐的成员向后移,将每一个都成员对齐到自然边界上,从而也导致了整个结构的尺寸变大。尽管会牺牲一点空间(成员之间有部分内存空闲),但提高了性能。也正是这个原因,我们不可以断言SIZEOFTESTSUCT1的结果为8。在这个例子中,SIZEOFTESTSUCT1的结果为12。介绍一下ERROR预处理_追雨制作ERROR预处理指令的作用是,编译程序时,只要遇到ERROR就会生成一个编译错误提示消息,并停止编译。其语法格式为ERRORERRORMESSAGE注意,宏串ERRORMESSAGE不用双引号包围。遇到ERROR指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。枚举与DEFINE宏的区别_追雨制作1),DEFINE宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。2),一般在编译器里,可以调试枚举常量,但是不能调试宏常量。3),枚举可以一次定义大量相关的常量,而DEFINE宏一次只能定义一个。SUCT与CLASS的区别_追雨制作在C里SUCT关键字与CLASS关键字一般可以通用,只有一个很小的区别。SUCT的成员默认情况下属性是PUBLIC的,而CLASS成员却是PRIVATE的。很多人觉得不好记,其实很容易。你平时用结构体时用PUBLIC修饰它的成员了吗既然SUCT关键字与CLASS关键字可以通用,你也不要认为结构体内不能放函数了。为什么要有SUCT关键字_追雨制作SUCT是个神奇的关键字,它将一些相关联的数据打包成一个整体,方便使用。在网络协议、通信控制、嵌入式系统、驱动开发等地方,我们经常要传送的不是简单的字节流(CHAR型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。经验不足的开发人员往往将所有需要传送的内容依顺序保存在CHAR型数组中,通过指针偏移的方法传送网络报文等信息。这样做编程复杂,易出错,而且一旦控制方式及通信协议有所变化,程序就要进行非常细致的修改,非常容易出错。这个时候只需要一个结构体就能搞定。平时我们要求函数的参数尽量不多于4个,如果函数的参数多于4个使用起来非常容易出错(包括每个参数的意义和顺序都容易弄错),效率也会降低(与具体CPU有关,ARM芯片对于超过4个参数的处理就有讲究,具体请参考相关资料)。这个时候,可以用结构体压缩参数个数。威盛公司软件C工程师笔试题面试题_追雨制作1HOWGOODDOYOUSEEYOURSPROGRAMMINGSKILLSPLEASECIRCLEYOURANSWERSCFAIR/GOOD/EXCELLENTCFAIR/GOOD/EXCELLENT2PLEASEESTIMATEYOURPROGRAMMINGEXPERINCEHOWMANYLINESOFCODEAREYOURBIGGESTCPROGRAMEVERWRITTENEXCLUDINGTHESTANDARDLINKEDLIBRARYHOWMANYLINESOFCODEAREYOURBIGGESTCPROGRAMEVERWRITTENEXCLUDINGTHESTANDARDLINKEDLIBRARY3PLEASEEXPLAINTHEFOLLOWINGTERMSDATAENCAPSULATIONINHERITANCEPOLYMORPHISM4WHATISAVIRTUALBASECLASSHOWDOYOUDECLARESUCHACLASSHOWWOULDYOUUSEITINADESIGN5WHATISATEMPLATEORCONTAINERCLASSHOWDOYOUDECLARESUCHACLASS6WHICHARETHEACCESSCONOLLEVELSFORCLANGUAGE7WHATISRTTIHOWDOYOUACHIEVERTTIINYOURDESIGN8WHATARETHEMAJORDIFFERENCESBETWEENSTATICANDNONSTATICMEMBERFUNCTIONS9HOWDOYOUCALLAREGULARMEMBERFUNCTIONFROMASTATICMEMBERFUNCTIONPLEASEUSEPSENDOCODETOPR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人赌协议书
- 2025年营养科糖尿病患者饮食指导模拟测试卷答案及解析
- 2025年放射治疗技术应用与放疗并发症防治考核答案及解析
- 调解协议书分类
- 华为运动签署协议书
- 小麦磨粉初级创新创业项目商业计划书
- 幼儿园转让协议书
- 於泥清理协议书
- 油料宠物食品添加创新创业项目商业计划书
- 电梯 通讯协议书
- 中国密闭空间检测无人机行业市场前景预测及投资价值评估分析报告
- 2025面向机器学习的数据标注规范
- YY/T 0339-2024呼吸道用吸引导管
- 围手术期高血压专家管理共识
- 外科患者疼痛护理与管理
- 租金延迟缴纳申请书
- 学校体育学(唐炎-刘昕版)重点、知识点
- DL-T 2563-2022 分布式能源自动发电控制与自动电压控制系统测试技术规范
- 食堂工作人员培训内容
- 泛影葡胺在消化道造影中的应用
- 2022年11月四川省凉山州中级人民法院逐级遴选4名法官笔试题库含答案解析
评论
0/150
提交评论