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