c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
原文作者:aircraft
原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html
一套面试题的目录在此,还在继续完善中。。。。。。
c/c++ 2019面试题目录
1.类中的函数定义后加了一个const代表什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 代表它将具备以下三个性质: 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 2 3 4 5 | 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,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识
转发和使用本文,请注明作者信息和原文地址---本文原作者为aircraft
---大家好我是徐飞机,有没有大佬们的公司招c++开发/图像处理/opengl/opencv/halcon实习的啊,带上我一个呗QAQ。。。hhhhhh 想要免费获取前端,后端,c/c++,matlab,Python,opencv,机器学习,深度学习,安卓,java,等等全套视频教程请关注机器视觉开发公众号,转发集赞28即可百度云获得hhhhhhhh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2018-04-15 c语言课程设计之贪吃蛇代码及思路 c语言课程设计报告之贪吃蛇