
C/C++
我这个人很任性的
这个作者很懒,什么都没留下…
展开
-
引用和指针的区别
★ 相同点:都是地址的概念:指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 4.引用不能为空,指针可以为空; 5. “sizeof 引用”得到的是所指向的变...原创 2019-08-23 22:10:12 · 698 阅读 · 0 评论 -
c++面试三
17.struct和class的区别在用struct定义类时,所有成员的默认访问级别为public 在用class定义类时,所有成员的默认访问级别为private 早期的c++直接复用class关键字来定义模板18.内存模型有几类 C++内存由高地址到低地址依次是栈区(向下增长,用于存放函数内的局部变量,形参和函数返回值。系统会自动管理栈区的内存分配与回收)、堆区(向...原创 2019-08-28 21:16:48 · 183 阅读 · 0 评论 -
c++面试四
字符串操作函数1.strcpy() 函数 标准实现原型声明:extern char* strcpy(char *dst,const char *src); 头文件:string.h 功能:把src所指由NULL结束的字符串复制到dst所指的数组中。 说明:src和dst所指内存区域不可以重叠且dst必须有足够的空间来容纳src的字符串。 返回指向dst的指针。...原创 2019-08-29 10:25:29 · 156 阅读 · 0 评论 -
c++面试五
1.代理模式当待排数据元素为体积庞大的对象时,如何提高排序的效率?问题分析- 排序过程中不可避免的需要进行交换操作 -交换操作的本质为数据元素间的相互复制 -当数据元素体积较大时,交换操作耗时巨大解决方案:代理模式为待排数据元素设置代理对象 对代理对象所组成的序列进行排序 需要访问有序数据元素时,通过访问...原创 2019-08-29 11:27:57 · 143 阅读 · 0 评论 -
c++面试六
1.vector自扩展原理vector 常被称为“容器”,习惯将之理解为动态数组。它表示对象的集合,其中所有对象都相同,每个对象都对应一个索引,索引用来访问对象。作为动态数组,vector 有一个指针指向一片连续的内存空间。但是,这个内存空间肯定不是无限大的,当内存装不下数据时,系统会自动申请一片更大的空间,把原来的数据拷贝过去,释放原来的内存空间。vector 里面有 2 个成员函数s...原创 2019-08-29 21:42:52 · 150 阅读 · 0 评论 -
c++面试七
1.僵尸进程进程在运行时需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了)linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有的资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close的在程序终止时也会被关闭)。但是操作系统只是回收...原创 2019-08-29 22:37:18 · 225 阅读 · 0 评论 -
c++面试八
1.最长有效括号给定String,该String只包含 '(' 以及 ')' 字符,输出该String内的,最长的有效的括号的组合的长度给定一个只包含 '('和 ')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "...原创 2019-08-30 18:46:55 · 224 阅读 · 0 评论 -
嵌入式面试一
1.文件系统JFFS2、YAFFS、EXT32.可重入函数的条件有哪些在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数在...原创 2019-08-31 14:59:55 · 244 阅读 · 0 评论 -
嵌入式面试二
1.uboot的作用自身可开机直接启动 能够引导操作系统内核启动并给内核传参 能提供系统部署功能 能进行soc级和板级硬件管理2.linux启动流程内核的引导。 运行 init。 系统初始化。 建立终端 。 用户登录系统。嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS...原创 2019-08-31 19:42:58 · 189 阅读 · 0 评论 -
嵌入式三
1.进程与线程的区别地址空间:同一进程内的线程共享本进程的地址空间,而进程之间则是独立的地址空间。资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮进程切换时,消耗的资源大,效率低。所以涉及到频繁的切换时,使用线程要好于进程。同...原创 2019-09-05 22:13:30 · 296 阅读 · 0 评论 -
嵌入式笔试总结
1.数组基本知识#include <stdio.h>int main(){ int a[10] = {1,2,3,4,5,6,7,8,9,0}; int *p = &a[1]; printf("%d\n", p[6]); //8 return 0;}2.获取x的绝对值的宏abs(x)#define abs(x) ((...原创 2019-09-05 15:08:22 · 550 阅读 · 0 评论 -
嵌入式面试四
3.HTTP协议格式。HTTP使用统一资源标识符(URI)来传输数据和建立连接。URL(统一资源定位符)是一种特殊种类的URI,包含了用于查找的资源的足够的信息,我们一般常用的就是URL,而一个完整的URL包含下面几部分:http://www.fishbay.cn:80/mix/76.html?name=kelvin&password=123456#first1.协议部分...原创 2019-09-06 21:08:32 · 444 阅读 · 0 评论 -
死锁
1.什么是死锁死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。例如,在某一个计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机请求,但此时打印机正被进程P2所占用,在P2未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。...原创 2019-09-08 09:53:28 · 201 阅读 · 0 评论 -
c++面试二
8.虚拟继承的主要作用c++中允许一个类继承自多个父类一个子类可以拥有多个父类 子类拥有所有父类的成员变量 子类继承所有父类的成员函数 子类对象可以当作任意父类对象使用#include <iostream>#include <string>using namespace std;class BaseA{ int ma;public:...原创 2019-08-28 14:26:09 · 192 阅读 · 0 评论 -
c++面试一
1.new和malloc的区别new关键字是c++的一部分 malloc是由c库函数提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可进行初始化 malloc仅根据需要申请定量的内存空间new在所有c++编译器中都被支持 malloc在某些系统开发中是不能调用 new能够触发构造函数的调用 malloc仅分配...原创 2019-08-27 21:14:57 · 132 阅读 · 0 评论 -
构造中的异常
如果构造函数中抛出异常会发生什么情况?构造过程立即停止 当前对象无法生成 析构函数不会被调用 对象所占用的空间立即收回建议不要再构造函数中抛出异常 当构造函数可能产生异常时,使用二阶构造模式#include <iostream>#include <string>using namespace std;class Test{publi...原创 2019-08-27 15:15:17 · 187 阅读 · 0 评论 -
何时使用引用和指针
在任何情况下都不能用指向空值的引用。 一个引用必须总是指向某些对象。 因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。 相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”char *...原创 2019-08-23 22:40:47 · 381 阅读 · 0 评论 -
关于析构的问题
当程序中存在多个对象的时候,如何确定这些对象的析构顺序?单个对象创建时构造函数的调用顺序调用父类的构造过程 调用成员变量的构造函数(调用顺序和声明顺序相同) 调用类自身的构造函数 析构函数与对应构造函数的调用顺序相反多个对象析构时析构顺序与构造顺序相反#include <stdio.h>class Member{...原创 2019-08-25 11:33:17 · 148 阅读 · 0 评论 -
关于const对象的疑问
const关键字能否修饰类的对象?如果可以,有什么特性?const关键字能够修饰对象 const修饰的对象为只读变量 只读对象的成员变量不允许被改变 只读对象是编译阶段的概念,运行时无效c++中的const成员函数const对象只能调用const成员函数 const成员函数只能调用const成员函数 const成员函数不能直接改写成员变量的值 co...原创 2019-08-25 11:48:14 · 996 阅读 · 1 评论 -
关于类成员的疑问
成员变量和成员函数都是隶属于具体对象的吗?从面向对象的角度对象由属性(成员变量)和方法(成员函数)构成从程序运行的角度对象由数据和函数构成数据可以位于栈,堆和全局数据区 函数只能位于代码段结论每一个对象拥有自己独立的属性(成员变量) 所有对象共享类的方法(成员函数) 方法能够直接访问对象的属性 方法中的隐藏参数this用于指代当前对象...原创 2019-08-25 11:59:12 · 194 阅读 · 0 评论 -
C到C++的升级
c++更强调语言的实用性 所有变量都可以在需要使用时再定义 对比c语言中的变量都必须在作用域开始的位置定义 register关键字请求编译器将局部变量存储于寄存器中 c语言中无法获取register变量的地址 c++中可以获取register变量的地址,C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效 c语言,重复定义多个同名的全局变量是合...原创 2019-08-23 13:02:13 · 138 阅读 · 0 评论 -
关于赋值的疑问
什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?编译器为每个类默认重载了赋值操作符 默认的赋值操作符仅完成浅拷贝 当需要进行深拷贝时必须重载赋值操作符 赋值操作符与拷贝构造函数有相同的存在意义默认赋值操作符重载#include <iostream>#include <string>using namespace std;class Te...原创 2019-08-26 16:53:33 · 167 阅读 · 0 评论 -
关于string的疑问
#include <iostream>#include <string>using namespace std;int main(){ string s = "12345"; const char* p = s.c_str(); cout << p << endl; //12345 ...原创 2019-08-26 17:07:49 · 127 阅读 · 0 评论 -
关于动态内存分配
new和malloc的区别是什么?delete和free的区别是什么?new关键字与malloc函数的区别new关键字是c++的一部分 malloc是由c库函数提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可进行初始化 malloc仅根据需要申请定量的内存空间#include <iostream>...原创 2019-08-26 17:37:49 · 152 阅读 · 0 评论 -
关于虚函数
构造函数是否可以成为虚函数?析构函数是否可以成为虚函数?构造函数不可能成为虚函数在构造函数执行结束后,虚函数表指针才能被正确初始化析构函数可以成为虚函数建议在设计类时将析构函数声明为虚函数#include <iostream>#include <string>using namespace std;class Base{public...原创 2019-08-26 19:35:14 · 190 阅读 · 0 评论 -
单例模式
1.需求:在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)如何定义一个类,使得这个类最多只能创建一个对象?要控制类的对象数目,必须对外隐藏构造函数 思路: 将构造函数的访问属性设置为private 定义instance并初始化为NULL 当需要...原创 2019-08-27 11:42:26 · 104 阅读 · 0 评论 -
如何判断指针变量
思路:将变量分为两类:指针 vs 非指针编写函数指针变量调用时返回true 非指针变量调用时返回false 函数模板与变参函数#include <iostream>#include <string>using namespace std;class Test{public: Test() { } virtu...原创 2019-08-27 15:02:32 · 340 阅读 · 0 评论