当前位置:范文城>职场范本>面试>

C++基础面试题

面试 阅读(2.31W)

1,以下代码中的两个sizeof用法有问题吗?

C++基础面试题

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。主要原因是当对象的属性是与某种业务规则相关联时,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

多态的作用:

隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;

接口重用:为了类在继承和派生的时候,保证使用家庭中任一类的实例的某一属性时的正确调用。

精彩文章推荐: