2021年c语言面试大全.docVIP

  • 2
  • 0
  • 约1.78万字
  • 约 34页
  • 2020-11-13 发布于江苏
  • 举报
1.求下面函数返回值(微软) int func(x) { ??? int countx = 0; ??? while(x) ??? { ????????? countx ++; ????????? x = x(x-1); ???? } ??? return countx; } 假定x = 9999。 答案:8 思绪:将x转化为2进制,看含有1个数。 2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 答:引用就是某个目标变量“别名”(alias),对应用操作和对变量直接操作效果完全相同。申明一个引用时候,切记要对其进行初始化。引用申明完成后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其它变量名别名。申明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名一部分名,它本身不是一个数据类型,所以引用本身不占存放单元,系统也不给引用分配存放单元。不能建立数组引用。 3. 将“引用”作为函数参数有哪些特点? (1)传输引用给函数和传输指针效果是一样。这时,被调函数形参就成为原来主调函数中实参变量或对象一部分名来使用,所以在被调函数中对形参变量操作就是对其对应目标对象(在主调函数中)操作。 (2)使用引用传输函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用通常变量传输函数参数,当发生函数调用时,需要给形参分配存放单元,形参变量是实参变量副本;假如传输是对象,还将调用拷贝结构函数。所以,当参数传输数据较大时,用引用比用通常变量传输参数效率和所占空间全部好。 (3)使用指针作为函数参数即使也能达成和使用引用效果,不过,在被调函数中一样要给形参分配存放单元,且需要反复使用*指针变量名形式进行运算,这很轻易产生错误且程序阅读性较差;其次,在主调函数调用点处,必需用变量地址作为实参。而引用更轻易使用,更清楚。 4. 在什么时候需要使用“常引用”?  假如既要利用引用提升程序效率,又要保护传输给函数数据不在函数中被改变,就应使用常引用。常引用申明方法:const 类型标识符 引用名=目标变量名; 例1 int a ; const int ra=a; ra=1; //错误 a=1; //正确 例2 string foo( ); void bar(string s); 那么下面表示式将是非法: bar(foo( )); bar(hello world); 原因在于foo( )和hello world串全部会产生一个临时对象,而在C++中,这些临时对象全部是const类型。所以上面表示式就是试图将一个const类型对象转换为非const类型,这是非法。 引用型参数应该在能被定义为const情况下,尽可能定义为const 。 5. 将“引用”作为函数返回值类型格式、好处和需要遵守规则? 格式:类型标识符 函数名(形参列表及类型说明){ //函数体 } 好处:在内存中不产生被返回值副本;(注意:正是因为这点原因,所以返回一个局部变量引用是不可取。因为伴随该局部变量生存期结束,对应引用也会失效,产生runtime error! 注意事项: (1)不能返回局部变量引用。这条能够参考Effective C++[1]Item 31。关键原因是局部变量会在函数返回后被销毁,所以被返回引用就成为了无所指引用,程序会进入未知状态。 (2)不能返回函数内部new分配内存引用。这条能够参考Effective C++[1]Item 31。即使不存在局部变量被动销毁问题,可对于这种情况(返回函数内部new分配内存引用),又面临其它尴尬局面。比如,被函数返回引用只是作为一个临时变量出现,而没有被给予一个实际变量,那么这个引用所指向空间(由new分配)就无法释放,造成memory leak。 (3)能够返回类组员引用,但最好是const。这条标准能够参考Effective C++[1]Item 30。关键原因是当对象属性是和某种业务规则(business rule)相关联时候,其赋值常常和一些其它属性或对象状态相关,所以有必需将赋值操作封装在一个业务规则当中。假如其它对象能够取得该属性很量引用(或指针),那么对该属性单纯赋值就会破坏业务规则完整性。 (4)流操作符重载返回值申明为“引用”作用: 流操作符和,这两个操作符常常期望被连续使用,比如:cout hello endl; 所以这两个操作符返回值应该是一个仍然支持这两个操作符流引用。可选其它方案包含:返回一个流对象和返回一个流对象指针。不过对于返回一个流对象,程序必需重新(拷贝)结构一个新流对象,也就是说,连续两个操作符实际上是针对不一样对象!这无法让人接收。对于返回一个流指针则不能连续使用操作符。所以,返回一个流对象引用是惟一选择。这个

文档评论(0)

1亿VIP精品文档

相关文档