试题
解释
那个题打错字了,是:友元运算法符,指的是以友元的形式重载运算符。
运算符重载两种形式:成员函数和友元
若是成员函数 在重载时会有一个隐藏的参数 *this 所以答案是 C
若是友元的话就不存在默认参数了,答案是B
这个错误主要是没看清找不必要的。函数主要是函数名 函数体 参数 返回值等。
数组的定义和实例化考察:
本题定义了一个二维数组,分别是x[0]和x[1]两个。
所以 x[1]就是4的地址 *x[1]表示4这个值了。
而且,在x[][]二维的定义中 的初始化方式 参考
http://see.xidian.edu.cn/cpp/biancheng/view/152.html
转义字符的含义考察,\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
但是 还有一个考察 那就是 字符串以 \0为结束。所以,strlen 不会检测\0以后的字符长度。st的大小就是数组的大小20
还是字符串的问题:什么是字符创长度呢?我觉得这个答案估计是错了,当然,我用sizeof求 得到 4 用strlen得到 3 可以知道,sizeof 表示 char* 的长度 包括了 \0 而 strlen在\0也结束了 并且不包括它。
这个题在面试中碰到过,下面说一下几种情况:
int arr[3]
1. 指针数组
int *p[3]
这个定义了一个指针数组,元素是三个指针 分别指向 三个int型的地址。
等同于 int *(p[3])
2.指针
int (*p)[3]
定义了一个指针,指向一个有三个元素的数组的地址
如: p=&arr;
运算符优先级的考察:
个人觉得,不好记,但是一般的尽量记住:比如赋值运算符、&&、|| 等的优先级较低。
() 优先级最高等。
http://en.cppreference.com/w/cpp/language/operator_precedence
这个里面所有的优先级对照表可以参考。
题中:!的优先级比 &&要高,所以,!x为true 再来计算 &&后面的真值。另外,对于 &&和||还有编译器优化计算的能力,比如&&之前的值为false 就没有必要计算后面的值了,事实上,编译器就是这样工作的。
如下题
我们知道 ()的优先级最高,= 赋值运算较低,比较运算较为高。所以,&&之前的值
为(m=a>b)
这个得好好讲讲了,首先是计算顺序,>比赋值要高所以得到 m=0 。之后就是赋值后的返回值了,
int operator=(int) 返回赋值的那个值,为 0
所以整个表达式的值是 0 及不会执行后面的值了。