C++面试题的总结

试题

解释

C++面试题的总结

 

那个题打错字了,是:友元运算法符,指的是以友元的形式重载运算符。

运算符重载两种形式:成员函数和友元

若是成员函数 在重载时会有一个隐藏的参数 *this 所以答案是 C

若是友元的话就不存在默认参数了,答案是B

 

C++面试题的总结

这个错误主要是没看清找不必要的。函数主要是函数名 函数体 参数 返回值等。

 

C++面试题的总结

数组的定义和实例化考察:

本题定义了一个二维数组,分别是x[0]和x[1]两个。

所以 x[1]就是4的地址 *x[1]表示4这个值了。

而且,在x[][]二维的定义中 的初始化方式 参考

http://see.xidian.edu.cn/cpp/biancheng/view/152.html

 

C++面试题的总结

转义字符的含义考察,\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
但是 还有一个考察 那就是 字符串以 \0为结束。所以,strlen 不会检测\0以后的字符长度。st的大小就是数组的大小20

 

C++面试题的总结

还是字符串的问题:什么是字符创长度呢?
我觉得这个答案估计是错了,
当然,我用sizeof求 得到 4 用strlen得到 3
可以知道,sizeof  表示  char* 的长度  包括了 \0
而 strlen在\0也结束了 并且不包括它。
 

C++面试题的总结

 这个题在面试中碰到过,下面说一下几种情况:

int arr[3]

1. 指针数组

int *p[3]

这个定义了一个指针数组,元素是三个指针 分别指向 三个int型的地址。

等同于 int *(p[3])

2.指针

int (*p)[3]

定义了一个指针,指向一个有三个元素的数组的地址

如: p=&arr;

C++面试题的总结

运算符优先级的考察:

个人觉得,不好记,但是一般的尽量记住:比如赋值运算符、&&、|| 等的优先级较低。

() 优先级最高等。

http://en.cppreference.com/w/cpp/language/operator_precedence

这个里面所有的优先级对照表可以参考。

题中:!的优先级比 &&要高,所以,!x为true 再来计算 &&后面的真值。另外,对于 &&和||还有编译器优化计算的能力,比如&&之前的值为false 就没有必要计算后面的值了,事实上,编译器就是这样工作的。

如下题

C++面试题的总结

我们知道 ()的优先级最高,= 赋值运算较低,比较运算较为高。所以,&&之前的值

为(m=a>b)

这个得好好讲讲了,首先是计算顺序,>比赋值要高所以得到 m=0 。之后就是赋值后的返回值了,

      int operator=(int) 返回赋值的那个值,为 0

所以整个表达式的值是 0 及不会执行后面的值了。

 

还有一个题,跟人觉得考得挺好的,这里贴出来:
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
p参数是复制原有指针的值,而不是原来的指针,所以即使p重新指向新的地址,但原来的指针指向的地址不变。
char *GetMemory(void)
{
char p[]="helloworld";
return p;
}
p是局部变量,在离开作用域后栈空间会被回收,结果不可预料。
void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
p是指向传入的指针的指针,*p为传入的指针赋值,所以改变了传入指针的值,也可以写成这样:
void GetMemory(char *&p)
{
p=(char*)malloc(100);
}
效果一样

 

 

你可能感兴趣的:(C++)