《c++基础面试题》由会员分享,可在线阅读,更多相关《c++基础面试题(4页珍藏版)》请在金锄头文库上搜索。
1、C+基础面试题 1,以下代码中的两个sizeof用法有问题? sizeof如用于数组只能测出静态数组的大小无法检测动态分配的或外部数组大小注意:数组名作为函数参数时退化为指针数组名作为sizeof()参数时数组名不退化因为sizeof不是函数 请问以下代码有什么问题 intmain() chara; char*str=a; strcpy(str,”hello”); printf(str); return0; 没有为str分配内存空间将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址虽然可以正确输出结果但因为越界进行内在读写而导致程序崩溃 Strcpy的在库函数string.h中程
2、序的主要程序在于越办进行内存读写导致程序崩溃 2,constchar*s=“AAA”; Printf(“%s”,s); S0=B; Printf(“%s”,s); “AAA”是字符串常量S是指针指向这个字符串常量所以声明s的时候就有问题 Constchar*s=”AAA”,然后又因为是常量所以对S0的赋值操作是不合法的 3,Charszstr10; Strcpy(szstr,”0432156789); 产生什么结果?为什么? 正常输出长度不一样会造成非法的OS覆盖别的内容 4,交换两个变量的值不使用第三个变量即a=3,b=5交换之后a=5,b=3; 两种解法一种是用算术算法一种是用(异或) a
3、=a+b; b=ab; a=ab; or a=ab;/只能对int,char b=ab; a=ab; or a=b=a; 5,指出下面代码的输出并解释为什么 main() inta5=1,2,3,4,5; int*ptr=(int*)(a+1); printf(“%d,%d”,*(a+1),*(ptr1); 输出:25 6,将”引用”作为函数返回值类型的格式、好处和需要遵守的规则 格式:类型标识符函数名(形参列表及类型说明)/函数体 格式:在内存中不产生被返回值的副本:(注意:正是因为这点原因所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束相应的引用也会失效) 注意事项: 不
4、能返回局部变量的引用主要原因是局部变量会在函数返回时被销毁因此被返回的引用就成为了”无所指的”引用程序会进入未知状态 不能返回函数内部new分配的内存的引用虽然不存在局部变量的被动销毁问题可对于这种情况(返回函数内部new分配内存的引用)又面临其它尴尬的局面如被函数返回的引用只是作为一个临时变量出现而没有被赋予一个实际的变量那么这个引用所指向的空间(由new分配)就无法释放 可以返回类成员的引用但最好是const主要原因是当对象的属性是与某种业务规则相关联时其赋值常常与某些其它属性或者对象的状态有关因此有必要将赋值操作封装在一个业务规则当中如果其它对象可以获得该属性的非常量引用(或指针)那么对该属性的单纯赋值就会破坏业务规则的完整性 多态的作用: 隐藏实现细节使得代码能够模块化;扩展代码模块实现代码重用; 接口重用:为了类在继承和派生的时候保证使用家庭中任一类的实例的某一属性时的正确调用 精彩文章推荐: