C/C++基础笔试题1.1.2(十问解决方案运营商)
他写在博客上不负责任,有人踩在上面,原因一点点失去了它。
其实纯常见问题。特别糟糕,由于鲍文看起来很大的优势就是想更直接看到的东西。
好了。返回整个标题。
1.你脑海中的运算符有哪些。按优先级排个序?
这个问题明显没有标准答案,可是最主要的还是要有吧。
比方+ ,- ,* ,/ ,%, 前++/--,后++/--,=,<, >, << ,>>,(),&,^,|,~以及逗号","域名符"::",&&,||等等等等。
其优先级麻,这个可能会略微麻烦一点,可是自己简单试验肯定能够做出来的。
所谓的优先级顺序能够看博文最后的表。
2 .malloc/free 和 new/delete的差别?(我没有跑题?。)
从功能上两者都是申请/释放动态的数组可是,malloc/free是stdlib的函数。须要加头文件stdlib。而new/delete是运算符。
1、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。
2、malloc/free使用的内存空间为堆区,new/delete是free store区。
3、free须要推断非空,非空才干释放。可是delete是不须要的
4、另外在使用new/delete是调用构造函数/析构函数,而malloc/free不过对内存分配,也因此不能满足非内部数据。
3.让你来写一个重载函数++i,i++,你怎么写?
这个是基本功
/***********************************************************
> OS : Linux 3.11.10-301.fc20.x86_64 Fedora20
> Author : yaolong
> Mail : dengyaolong@yeah.net
> Time : 2014年07月17日 星期四 09时02分44秒
**********************************************************/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
class A{
public:
int x;
A(int x=0){
this->x=x;
}
A operator ++(int ){ //i++,先返回复制品。再搞原对象
A tmp=*this ;
this->x++;
return tmp;
}
A operator ++(){//++i,直接改动对象
this->x++;
return *this;
}
};
int main(){
A a1(3);
A a2=a1++;
cout<<a2.x<<endl;; //3
cout<<a1.x<<endl; //4
A a3=++a2;
cout<<a3.x<<endl; //4
cout<<a2.x<<endl; //4
}
4.来看个程序
#include<iostream>
using namespace std; int main(){
int x=3;
cout<<x+x%2==1<<endl;
return 0;
}
这个程序是不能正常执行的。编译错误,依据优先级看来是% , + 。 <<, ==
所以整个式子解释应该是
x%2 -> 1
x+ 1 -> 4
1<<endl 出错了
以下假如式子变成这样,
cout<<(x+x%2==1<<2)<<endl;
这样整个式子的解释是这种
由于()优先级最高(在这个式子中),所以先解释()内的
x%2 -> 1
x+1 ->4
1<<2 -> 4
4 ==4 得到1
之后到运算符<<
而<<是从左到右的,故cout<<1 之后再输出转行
输出的为
1
当我们这样写
int y=x+x%2==1<<2;
cout<<y<<endl;
这时候就没有错,为什么?由于=号的优先级非常低,仅仅有逗号比其更低了,就仅仅有一个
我们不是常常这么做吗?
int x=3,y;
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;
}
这个用上面的分析,非常easy就知道了
第一个先运行最里层括号
(x+x%2)
而%比+优先,所以就是
x%2 ->1
x+1 -> 4
之后外层括号
4==1 -> 0(false)
第一个输出为0
第二个很easy知道
x%2->1
1==1 -> 1(true)
x+1 -> 4
第二个输出4
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);
}
这个题目是相对过分的,由于手写根本写不出正确答案,不同编译器输出结果页不一样。
看fun0(x,y,z)
由于x,y,z没有初始值,所以每一个函数的第一个输出x,y,z都是编译器默认的。
int a=2,b=3,c=7;
x=a*b,c;
y=(a*b+z,z=c);
这个,先声明了a=2,b=3,c=7
x=a*b,c
由于逗号比=优先级低,前面说过,=号是倒数第二低,逗号是倒数第一。x=6,c没有不论什么改变
y=(a*b+z,z=c)
先执行括号的东西
(a*b+z,z=c)
,号是从左到右执行,假设感兴趣的朋友能够试验一下(p=a*b+c,z=c),把p数出来就知道了
所以先运行表达式
a*b+z。得到2*3 +z(z是一个乱七八糟的数,我的GCC编译出来的是32767)。
再运行z=c,而(表达式1,表达式2。表达式……)最后返回的是最后一个表达式
所以y=z=c,y=7,z=7
第一个fun0在我这里输出为
0 0 32767
6 7 7
对于fun1,2也是通=,的优先级来推断
很easy就能够判断出来其结果
最后总的输出为
0 0 32767
32773
6 7 7
0 0 32767
32772 32772 10
0 0 32767
32772 10 10
以下再附带一个fun3,用于測试上述到的逗号的从左到右运行
void fun3(int x,int y ,int z){
cout<<x<<" "<<y<<" "<<z<<endl;
int a=2,b=3,c=7,p;
x=a*b,c;
y=(p=a*b+z,z=c);
cout<<p<<endl;
cout<<x<<" "<<y<<" "<<z<<endl;
}
7.我们用%来做余运算,%仅仅能应用于正整数对吗?
这个问题自己測试就能够拉,是能够对非0的整数进行操作,可是不能对浮点型等操作。
8.域运算符::我们经常常使用到,请问::能够重载吗?
不能够的,运算符有一些是不能重载的。比方本题的::和.等等。在文章最后会有提到可否重载。
9.运算符重载作为非成员函数重载时必须定义为友元函数?
不是的,当操作的成员为公开的时候不一定要定义友元函数。
10. 运算符必须是符号吗?(即仅仅能是+,-,*,/,::之类的吗?)
不是的。文章一開始就提到了。new/delete是运算符。还有sizeof,和强制转换操作符等。
图片来自百度百科。
版权声明:本文博主原创文章,博客,未经同意不得转载。
C/C++基础笔试题1.1.2(十问解决方案运营商)的更多相关文章
- Android开发面试经——3.常见Java基础笔试题
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...
- Android开发面试经——2.常见Android基础笔试题
标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报 分类: Android开发(29) 版 ...
- 非常全面的java基础笔试题
下面是java基础笔试题,当时我去笔试,做了1个小时(80道选择题,后面的简答题就没时间做了),结果很吓人,太挫了,最后被面试官忽悠去培训去了,呵呵.我偷偷把面试题弄了下来,用来学习吧,也希望能对你们 ...
- Java基础&笔试题
这些题目是近期我参加过的笔试题和一些我在网上选的部分题,在这里做笔记,认真去学习,更好的应对后面的招聘.有错误欢迎指出. 一.Java基础部分 1.指针在任何情况下都可进行>,<,> ...
- Android采访开发——2.通用Android基础笔试题
注意finddreams博客: http://blog.csdn.net/finddreams/article/details/44219231 正值跳槽的热季.整理一下Android面试中最常考的笔 ...
- python基础面试题整理---从零开始 每天十题(01)
最近在弄flask的东西,好久没写博客的,感觉少了点什么,感觉被别人落下好多,可能渐渐的养成了写博客的习惯吧.也是自己想学的东西太多了(说白了就是基础太差了,只是know how,不能做到konw w ...
- SQL基础&笔试题
仅以此篇博客纪念让我羞愧的一次笔试,作为对数据库基础的恶补. 一.SQL的基本概念: SQL是集数据定义语言DDL,数据操纵语言DML,数据控制语言DCL的功能于一体,可以独立完成数据库生命周期的全部 ...
- iOS 基础笔试题
参考:https://www.jianshu.com/p/1d3496bc5bda 1.#import 跟#include.@class有什么区别?#import<> 跟 #import& ...
- 常见计算机基础笔试题总结quickstart
[本文链接] 1. 以下是一颗平衡二叉树,请画出插入键值3以后的这颗平衡二叉树. 分析:考察平衡二叉树的基本操作,插入3变成不平衡,需要节点5右旋一次,节点2左旋一次.. 2. 表达式X=A+(B*( ...
随机推荐
- HTTP2.0协议
HTTP2.0协议 http2协议的草案已经出来了,阅读了一下网上的中文版,http2尽可能的兼容http1.1.改进了http1.1协议的不足. http1.0和http1.1的缺点: 1.http ...
- 【原创】leetCodeOj --- Binary Search Tree Iterator 解题报告
时间挤挤总是有的 太久不做题,脑子都生锈了.来道水题练练手 题目地址: https://leetcode.com/problems/binary-search-tree-iterator/ 题目内容: ...
- LeetCode 53 Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- POJ 2250 Compromise (UVA 531)
LCS问题.基金会DP. 我很伤心WA非常多.就在LCS问题,需要记录什么路. 反正自己的纪录path错误,最后,就容易上当. 没有优化,二维阵列,递归打印,cin.eof() 来识别 end of ...
- Node.js 博客实例(五)编辑与删除功能
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第五章,因为版本号等的原因,在原教程基础上稍加修改就可以实现. 如今给博客加入编辑文章与删除文章的功能 ...
- [转载]使用python上传图片到 yeelink
#/bin/env python # -*-coding:utf=8 -*- import os,time,subprocess,shlex import urllib2 def upload_yee ...
- [视频解说]0基础课程-运营商-Java它J2se
本节解说 运营商应用 Java 算被分成: 算术运算符 颂值运营商 逻辑运算符 位运算符 元运算符 这里录制了 视频解说这几大类运算符,并有练习题提供大家 面试题: 1. 最有效率的方式算出2乘以8等 ...
- MySQL与逻辑模块
启动MySQL 1.初始化模块运行&&存储引擎初始化运行 2.1中运行完毕后 ---->连接管理模块接手 3.连接管理模块启动处理client连接请求的监听程序(tcp/ip 网 ...
- WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现
原文:WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统,5 ...
- jdk阅读xml文件
前言 你需要阅读的时间来写一个通用组件xml文件,但考虑到组件分布更容易,这样一来在第三方小引用jar包.因此,直接jdk内建的xml分析方法.可能都没有第三发的组件强大. 导入的文件: import ...