c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
原文作者:aircraft
原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html
一套面试题的目录在此,还在继续完善中。。。。。。
c/c++ 2019面试题目录
1.类中的函数定义后加了一个const代表什么?
代表它将具备以下三个性质: 1.const对象只能调用const成员函数。
2.const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误
3.在const函数中调用非const成员函数是语法错误 任何不会修改数据成员的函数都应该声明为const类型。
如果在编写const成员函数时,不慎修改了数据成员,
或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
所以看完上面这句话就应该明白了函数定义后加const的用处,以及什么时候用到const,这会是一个好的编程习惯的。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const成员函数
private:
int m_num;
int m_data[10];
}; int Stack::GetCount(void) const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const函数
return m_num;
}
2.#include<>与#include""的区别?
<>表明这是一个工程或者标准头文件。查找过程会首先检查预定义的目录,我们可以通过
设置搜索路径环境变量或者命令行选项来修改这些目录、 “”表明该文件是用户自定义的头文件,查找时应从当前目录或者指定目录查找。 总结:自己的定义的头文件用双引号导入,像库文件之类的标准头文件用<>导入
3.c++中的双冒号::
1、表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。 2、直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加:: 3、表示引用成员函数及变量,作用域成员运算符 4、变量前面的双冒号::,代表引用全局变量,比如我在全局定义了一个全局变量
int value = 1; 局部函数内又定义了一个 int value = 2; 而在这个局部函数中我想给全局那个变量赋值就这样 ::value = 250;
4.宏参数的连接,#和##符号的作用。
某面试题:求下面输出结果
一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. #define STR(s) #s #define CONS(a,b) int(a##e##b) printf(STR(vck)); // 输出字符串"vck"
printf("%d\n", CONS(2,3)); // 2e3 输出:2000
5.static定义的函数如何在其他文件调用?(不能在其他文件直接调用!!!)
1. 通过函数指针的方式, 我们只要得到这个函数的地址,那么就一定可以调用它,
大家要知道static函数是对编译器起作用的,在运行时根本没有static了,有的只是函数地址,
所以只要搞到函数地址管它是不是static的,照调不误,
2. 通过非static函数的方式,我们可以定义一个普通的函数,
让这个普通函数调用static函数,让后在把这个普通函数在头文件中声明
举例:利用可在本文件调用的属性,另加一个函数fun,fun调用该static函数;其他文件调用fun即可。 另外,要强调,extern不能作用在static函数
6.sizeof计算变量空间容易出错的地方?
某面试题:
char str[] = "hello";
sizeof(str)=_?_ void Func(char str[100])
{
sizeof(str)=_?_
}
第一个答案是6,因为对数组变量进行sizeof运算的时候得到的是数组占用内存。 第二个答案是4,在函数中形参的作用是传址,本质是一个指针,指向了一个str[100]。 某面试题: class A
{
public:
char c1;
int i;
char c2;
};
int main()
{
printf("%d",sizeof(A));
return 0;
}
问输出是多少?
很多人都是直接相加求值,但是sizeof对类以及结构体作用时会有一个字节对齐机制,
对齐机制的对齐方式为其最大成员对齐方式,会将定义变量的内存补全,方便系统运算。
c1的偏移量为0,i的偏移量为4,c1与i之间便需要3个字节填充。
c2的偏移量为8,那么结果就是1+3+4+1=9,由于这里最宽的字节
为int,4个字节。补全之后答案为12. 这里吧Int换成double的话答案就是24 也可以自己手动是设置对齐方式,只要在程序的开头部分 加上一句 #pragma pack(x)
7.内联函数与宏的区别?
1、内联函数在编译时展开,宏在预编译时展开。
2、在编译的时候,内联函数可以被镶嵌到代码中,而宏只是一个简单的文本替换。
3、宏不是函数,inline是函数。
4、宏在定义的时候容易因为二义性出错,而内联函数不会。
8.内联函数比宏优势在什么地方?
9.为什么不把所有函数都定义成内联函数呢?
10.下面输出为多少?(某年微软面试题)
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
} 假定x = 9999。 答案:8 思路:将x转化为2进制,看含有的1的个数。
本篇是第一篇面试题总结,后面还有好多篇,想要剑指offer的关注我把!!!
若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识
c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)的更多相关文章
- c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html 1.利用指针交换两个字符串方法?(这题是我当年读大一的时候看到的,好怀 ...
- 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)
所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...
- 第一篇 网站基础知识 第4章 Java中Socket的用法
第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...
- 面试官:说一说Zookeeper中Leader选举机制
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又是一个阳光明媚的一天,我又 ...
- 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!
最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...
- 面试官问我redis数据类型,我回答了8种
面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...
- 面试官问我MySQL索引,我
面试官:我看你简历上写了MySQL,对MySQL InnoDB引擎的索引了解吗? 候选者:嗯啊,使用索引可以加快查询速度,其实上就是将无序的数据变成有序(有序就能加快检索速度) 候选者:在InnoDB ...
- 面试官一口气问了MySQL事务、锁和MVCC,我
面试官:你是怎么理解InnoDB引擎中的事务的? 候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败 候选者:事务其目的是为了「保证数据最终的一致性」. 候选者:举个例子,我给你发 ...
- 面试官问我MySQL调优,我真的是
面试官:要不你来讲讲你们对MySQL是怎么调优的? 候选者:哇,这命题很大阿...我认为,对于开发者而言,对MySQL的调优重点一般是在「开发规范」.「数据库索引」又或者说解决线上慢查询上. 候选者: ...
随机推荐
- noip第9课作业
1. 打印乘法表 [问题描述] 用for循环实现输出1至9的乘法表 [样例输出] 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4 ...
- RepositionBars的用法和参数的意义(引用别人的)
MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...
- STL---规范
1. "插入操作" 新插入的数据位于‘哨兵迭代器“所指的节点的前方,并返回指向新插入位置的‘迭代器(指针)“.这是STL对于插入操作的标准规范. 2.链表操作 对于一个链式表,如果 ...
- EBS Archiving and Purging: You Know you need to
A number of trends in the IT industry have contributed to the increasing size of ERP application dat ...
- ThinkPad T430i,如何将WIN8换成WIN7???
1. 启动时不断点击键盘上的F1键,进入BIOS 界面选择“Restart”→把 “OS Optimized Default”设置为 “disabled” ,(OS Optimized Default ...
- EGOCache缓存框架详细讲解
EGOCache是一个轻量级的缓存框架.用法简单方便,在现在的项目中,我就用到EGOCache来缓存下载过的照片和字符串. 有人可能会问到,缓存照片还需要用EGOCache吗?AFNetworking ...
- Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
首先有个wp上的http服务器 http://wphttpserver.codeplex.com/ 使用方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- JAVA 从头开始<六>
一.静态代码块 静态代码块不需要创建对象才执行,比对象数据优先存在于内存中 二.静态函数 三.单例设计模式 1.饿汉单例模式 缺点:一声明就创建一个对象,没有使用的话就浪费了. 2.懒汉单例模式 1. ...
- 徒手画个disk不容易啊。。。
static const GLfloat disk_vertex_buffer_data[] = { // quarter 1 0.0f, 0.0f, -1.0f, 0.707f, 0.0f, -0. ...
- OVS 内核KEY值提取及匹配流表代码分析
原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...