本文似乎都是问题,意在引起思考,回忆,主题是运算符,另外这些问题是没有特别的逻辑上的关系,只是我想到的就问了,虽然是随便问,但是你能不能随便答呢?。
运算符,我们在每一个程序中都会用到,也是最最基础的基本功,本系列C/C++基础笔试题等,是没有纲要,没有规律的一系列博文。
为什么这样子,因为作者是渣阿,他只能学一点说一点,力求通俗阿,傻瓜但不失主线阿。
1.0写的是字节对齐,没看过有兴趣的朋友可以戳这里。1.1写的是与运算符相关的内容,你最“熟悉”的“朋友”。
首先,我想先问大家几个问题?
1.你脑海中的运算符有哪些,按优先级排个序?
2.malloc/free 和 new/delete的区别?(我没有跑题!)
3.让你来写一个重载函数++i,i++,你怎么写?
来到这里,可能你还是喜欢读程序吧。
4.来看个程序
#include<iostream> using namespace std; int main(){ int x=3; cout<<x+x%2==1<<endl; return 0; }
看看这个程序输出结果跟你想的一样不一样?被坑了吗?
5.再来看一个?跟你想的又一样不一样?
#include<iostream> using namespace std; int main(){ int x=3; cout<<((x+x%2)==1)<<endl; cout<<(x+(x%2==1))<<endl; return 0; }如果你一直错, 或者基本错的话,那么,你就跟我一样悲剧了。另外,这些题目在哪里来的?其实是我在刷ACM的时候犯的一些小错。放这种题目,其实,我只是想引出优先级。
6.来个难一点的,感觉一下逗号和括号的恶心?
#include<iostream> using namespace std; void fun0(int x,int y ,int z){ cout<<x<<" "<<y<<" "<<z<<endl; int a=2,b=3,c=7; x=a*b,c; y=(a*b+z,z=c); cout<<x<<" "<<y<<" "<<z<<endl; } void fun1(int x,int y,int z){ cout<<x<<" "<<y<<" "<<z<<endl; int a=2,b=3,c=7; y=(x=a+b+z),(z=b+c); cout<<x<<" "<<y<<" "<<z<<endl; } void fun2(int x,int y,int z){ cout<<x<<" "<<y<<" "<<z<<endl; int a=2,b=3,c=7; y=((x=a+b+z),(z=b+c)); cout<<x<<" "<<y<<" "<<z<<endl; } int main(){ int x,y,z; fun0(x,y,z); fun1(x,y,z); fun2(x,y,z); }现在想想,还是做前面几个题目比较和谐。
为了和谐,我还是问一些YES OR NO的问题?
7.我们用%来做余运算,%只能应用于正整数对吗?
8.域运算符::我们常常用到,请问::可以重载吗?
9.运算符重载作为非成员函数重载时必须定义为友元函数?
10. 运算符必须是符号吗?(即只能是+,-,*,/,::之类的吗?)
如果你觉得我问的问题很无理取闹的话,额,的确是的,如果你对细节不追求,是很无理取闹的。(其实是你对基础功不追求)
对于上述十个问题,你有想法可以在评论中提出,好让其他朋友看到一起探究。
至于所谓的解释和标准答案,我会在1.1.2中提到,而1.1.2什么时候出来呢?估计明天或者后天吧?因为我在实习,需求改了,所以很烦呢!哎...暂时确定不下来。