
面试题总结
胡思先生
这个作者很懒,什么都没留下…
展开
-
NULL和nullptr的区别
1.C++98的指针空值一般我们在声明一个变量时,最好给变量一个合适的初始化值,否则可能会出现不可预测的错误。而我们一般是按照如下方法初始化的:int main(){ int a = 0; int b = NULL; //...}NULL实际是一个宏,我们在C头文件(stddef.h)中,可以看到如下代码:#ifndef NULL #ifdef __cplusplus #d...原创 2019-05-07 15:27:15 · 2262 阅读 · 0 评论 -
strcpy和strncy的缺陷
思维导图1.存在潜在越界问题当dest的长度 < src的长度的时候,由于无法根据指针判定其所指指针的长度,故数组内存边界不可知的。因此会导致内存越界,尤其是当数组是分配在栈空间的,其越界会进入你的程序代码区,将使你的程序出现非常隐晦的异常。2.字符串结束标志服’\0’丢失当dest所指对象的数组长度==count的时候,调用strncpy使得dest字符结束符’\0’丢失。3....原创 2019-05-11 15:52:23 · 2741 阅读 · 0 评论 -
重载,重定义,重写的区别
思维导图例子:class Person{private: virtual void id() { cout << "id()" << endl; } void name() { cout << "name" << endl; }public: void all() { id(); name(); } ...原创 2019-05-16 12:53:17 · 555 阅读 · 0 评论 -
格式化输出--%m.n
思维导图输出标准:1.%:表示格式说明的起始符号,不能省略2.-:有-b表示左对其输出,右边补空格,如省略表示右对齐,左边补空格3.0:有0表示指定空格填0,如省略指定空格不填。4.m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实形数小数点位。未指定n,浮点型默认精度为n = 6位格式字符格式符用以指定输出项的数据类型和输出格式、1.d格...原创 2019-05-21 16:16:43 · 4272 阅读 · 0 评论 -
memcpy和strcpy的区别
思维导图1.memcpy用法2.strycpy用法3.区别1.复制方法不同:strycpy不用指定复制长度,他遇到被复制字符串’\0’结束,容易溢出。memcpy是由第三个参数决定复制长度的2.复制内容不同“strcpy只能复制字符串,而memcpy能复制任意内容3.用途不同:一般用strcpy复制字符串,用memcpy复制其他类型...原创 2019-05-12 15:13:28 · 1304 阅读 · 0 评论 -
inline函数的总结
思维导图1.使用方法-1. 在函数返回类型前加Inline。成员函数可以在声明时候添加Inline也可以在定义时候添加inline。2.将成员函数定义在类定义式内,这个成员函数就被隐喻为Inline。内联说明对于编译器仅仅是一个建议,编译器可以忽略这个建议下面没有加lnline的时候,机器进行编译操作一般的函数调用,进行压栈操作,导致系统开销加大,花费了更多时间。下面是加了i...原创 2019-05-22 16:40:39 · 387 阅读 · 0 评论 -
C++多态
思维导图什么是多态?多态,从字面意思上理解就是多种形态,多种形式。在C++这种面对对象的语言中,就是“一个接口,多种实现”。多态分为静态多态和动态多态。怎么区分静态多态和动态多态?区别:在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定。静态多态:指在编译期间就可以确定函数的调用地址,并生产代码,这就是静态的,也就是地址是早早绑定的,静态...原创 2019-05-18 15:14:33 · 312 阅读 · 0 评论 -
虚函数,纯虚函数,普通函数的区别
原创 2019-05-18 15:15:35 · 283 阅读 · 0 评论 -
C++的类型转换
C的类型转换int main(){ int i = 1; double d = i; printf("%d, %.2f\n", i, d); //隐式类型转换 隐式转换:相关类型,相近类型 int* p = &i; //显示类型转换 显示转换:无关类型 int address = (int) p; system("pause"); return 0;}运...原创 2019-06-25 09:58:16 · 277 阅读 · 0 评论 -
C++11各种特性
1.C++的初始化:1.1C++98中初始化问题在C++98中,能用大括号对数组元素初始化,如下: int a[] = {1,2,3,4}但是不能对自定义类型却不能用大括号初始化,如下 vector<int> v{1,2,3,4};上面的初始化在C++98中是不允许的,但是在C++11中扩大了大括号括起的列表的作用范围,使其可以用于所有的内置类型和自定义类型,在使用初...原创 2019-06-26 18:40:50 · 567 阅读 · 0 评论 -
this指针的特性
思维导图特性原创 2019-05-20 15:50:38 · 338 阅读 · 0 评论 -
指针和引用的区别
参考文章思维导图1.为什么使用指针1.1每一个编程语言都使用指针C++将指针暴露给了 用户(程序员),而java和C#等语言则将指针隐蔽起来了。1.2使用指针的有点和必要性:指针能够有效的表示数据结构能动态分配内存,实现内存的自由管理能方便的使用字符串指针直接与数据的存储地址有关。比如:值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算。而指针...原创 2019-05-15 13:20:05 · 38405 阅读 · 7 评论 -
什么是函数指针?(理解及使用)
思维导图1. 定义: char* fun1(char* p1, char* p2)// 1 char** fun2(char* p1, char* p2);// 2 char*(*fun3)(char* p1, char* p2);// 31,2,3分别是什么意思呢?很简单,char*是返回类型,fun1是函数名,括号内是参数和1相似,char** 是返回类型...原创 2019-05-09 18:36:17 · 22954 阅读 · 2 评论 -
mem函数(memset)
1.函数介绍void *memset(void *s, int ch, size_t n);功能:将s中当前位置后面的n个字节用ch替换并返回s。作用:在一段内存中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法...原创 2019-05-07 11:12:38 · 1270 阅读 · 0 评论 -
mem系列函数(memcpy)
看了好多面经之后,我发现有很多题目都似乎很简单,但是如果要自己写的话,总感觉能写出个大概,但好像差点什么,所以我打算把见过的面试题总结出来,方便以后复习。memcpy下面是我们常见的的错误写法:这里把dest和src都强制转换成了(char*)类型,但是copy一定是一个个字节的吗?不一定。//一般版本,这里把dest和src都强制转换成了(char*)类型,但是copy一定是一个个字节完...原创 2019-05-06 15:26:54 · 1979 阅读 · 1 评论 -
const关键字总结
一.关于const关键字的思维导图二:const的使用方法1.定义const对象const修饰符把对象修饰为常量,意思是接下来对象都被当成常量使用,不能被修改在用const修饰的值不能更改一开始就要初始化类中的const对象需要通过构造函数初始化定义2.const对象默认为文件局部变量在全局作用域声明的const变量是文件的局部变量,只能被当前文件使用,不能被其他文件访问。如果...原创 2019-05-03 16:22:31 · 414 阅读 · 0 评论 -
new和malloc的区别及malloc详解
1.new和malloc的区别共同点:两者开的空间都存放在堆上,并且都需要手动释放不同点:在含义上:1.malloc是一个函数,new是一个操作符。初始化方面:2.malloc申请的空间不会初始化,new可以初始化空间。开辟空间方面:3.malloc需要手动计算空间大小并传递,而new只需要声明空间是什么类型就好。返回类型方面:4.malloc返回的类型是void*,必要的时...原创 2019-05-03 13:47:01 · 1083 阅读 · 0 评论 -
C++关键字statci的使用
一.static的作用有三种:限制变量或函数作用域,保持变量内容的持久,默认初始化为01.被static关键字修饰的全局函数或者变量具有文件作用域,即只可以在当前文件中可见。2.被static修饰的变量会存储在静态存储区,生命周期也为从定义直至程序结束。对于局部变量, 即使在函数退出后该静态变量依然存在,然而却无法访问,此外,static修饰的变量一生只能初始化一次(常考)3.静态存储区的...原创 2019-04-30 14:10:04 · 493 阅读 · 0 评论 -
结构体对齐规则及位域规则
让我们看看下面两个代码:struct S1{ char c1;//1 int i;//4 char c2;//1};struct S2{ char c1;//1 char c2;//1 int i;//4};int main(){ struct S1 s1 = { 0 }; printf("%d\n", sizeof(struct S1)); printf("...原创 2019-04-28 22:53:43 · 1977 阅读 · 0 评论 -
atoi()函数和itoa()函数的用法及其实现(字符串与整形的相互转化)
atoi()及itoa()的用法一.itoa()的用法1.原型:char itoa(int value, char string, int radix)2.头文件:include<stdlib.h>3.功能:将整数value转换成字符串存入string,radix为转换所用基数(分别为 2进制, 8进制, 10进制, 16进制)4.返回值:转换后的字符串的指针举例:voi...原创 2019-04-28 15:56:58 · 632 阅读 · 0 评论 -
判断编译器是大端还是小端
什么是大小端?有些编译器从低位字节开始存放,称为“小端”,有的从高位字节开始存放,称为“大端”。大端:高字节放在低地址,和我们从左往右阅读的顺序一致。小端:低字节放在低地址。int main(){ int a = 1; //[01 00 00 00]小端存储 //[00 00 00 01]大端存储 return 0;}如何判断大小端?1.通过字节大小判断因为int为4个...原创 2019-04-27 22:31:55 · 1063 阅读 · 2 评论 -
野指针(概念,产生原因,危害,避免方法)
思维导图:1.野指针与垂悬指针的区别:野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。2.概念指针指向了一块随机的空间,不受程序控制。3.野指针产生的原因:1.指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会随机指向一个区...原创 2019-05-08 13:57:40 · 48909 阅读 · 6 评论 -
正确定义二维数组
对二维数组进行正确初始化二维数组必须指定列的数量,行的数量可以不定义即可以省略第一维的定义,但不能省略第二维的定义1.分行进行初始化int a[2][3] = {{1,2,3},{4,5,6}};在{}内部再用{}把各行分分开,第0行的初值是1,2,3。第1行的初值是4,5,6。相当于执行:int a[2][3];a[0][0] = 1; a[0][1] = 2; a[0][2] =...转载 2019-06-24 16:23:17 · 37497 阅读 · 5 评论