面试之C/C++

1.Define 和 const区别

无数据类型                       有数据类型

字符替换无安全检查               有安全检查

Define 的生命周期止于编译器

2.堆和栈区别

程序员MALLOC NEW手动分配的

定义的变量

3.指针和引用区别

可修改:指针可以被重新赋值       引用必须初始化不能修改

合法性:测试防止为空             不需要测试合法性

4.strlen和sizeof

5.const * p 内容不变

* const p 地址不变

就近原则

6.Malloc 和New区别

Malloc内存的动态存储区中分配一个长度为  size 的连续空间,成功Malloc返回void *类型,否则返回NULL。(两次 malloc 分配的内存的内存块不一定是相邻的)

1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符

2.用new分配的对象会调用对象的构造函数,delete则会调用对象的析构函数, 对内存进行更加详细的工作。
而malloc和free从不调用构造和析构函数,他们只是简单的分配内存。

基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用
delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用
delete[]。对于 new 的单个对象,只能用
delete 不能用 delete[] 回收空间。Delete只能单个对象。

7.

函数模板

Temolate<typename T>

T fun(T x,T y)

{

T x;

}

8.结构体和类区别

C中   结构体不能定义函数

C++中  基本是一样的 默认的权限不同,struct默认public

9.抽象类 和 接口(虚基类)区别

只要一个成员函数为纯虚函数       接口所有成员函数都是纯虚函数

抽象类能够定义字段               接口不能出现字段

10.C++面向对象,开发效率高。兼容了C语言更接近底层,操作内存。

C++四种类型转换,C语言不易于查找,可以任意转换。C++要求严格。

Static_cast    常用类型转换f=static_cast<float>(i);

Const_cast    把const类型指针变为非const类型指针 *ptr =const_cast<int *>(fun(2,3))

Dynamic_cast 动态类型转换 子类和父类之间,上行,下行,类型检查virtual, Derived* d1 =Dynamic_cast<Dericed *>(b1);

Reinterpret_cast 重新解释 不同类型的指针类型转换

11.volatile 屏蔽系统对变量可能的优化;volatitle 这个关键字表述的问题一般都比较底层。表示每次都是从地址中读数据,而不是缓冲catch中。

1) 存储器映射硬件寄存器

2) 一个中断服务子程序中会访问到的非自动变量

3) 多线程应用中被几个任务共享的变量

12.Strcpy问题

可能出现的问题 溢出,导致后一个Buff被赋值,无论后面内存中的是什么,都将被覆盖,strcpy_s(dest,2,src)增加个大小。

13.inline作用

频繁调用,代码量小的函数。放在函数定义前。

与函数区别:函数调用时类似中断,转移到函数地址,执行,返回。

代码直接替换进程序。

14.explicit关键字

用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换(只能显示调用构造函数,不能隐式调用 “=”)

15.STATIC

静态全局变量    限制变量作用域,本文件有效

静态局部变量    只初始化一次

静态类成员      被所有实例共享

静态函数        不能被其他文件所用,其他文件可以定义相同名字的函数,不冲突

static全局变量只初使化一次,防止在其他文件单元中被引用;   
static局部变量只被初始化一次,下一次依据上一次结果值;
  
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

16.VIRTUAL

vitual构造函数,虚拟指针和虚拟链表,静态联编

virtual析构函数,正确析构,析构函数一般都应该定义为virtual的,主要不是防止内存泄露,而是为了正确的析构。

多态情况下能够正确释放子类。

18.STL容器

19.拷贝构造函数,=重载

A  b(a)(显示);   A  b=a(隐式);   //拷贝构造函数调用 ,深拷贝

A  a;   A  b;   b =a;   //赋值运算符调用 ,浅拷贝
A(const A& a)

{

N = new int[1] ;

Memcpy(n,a.n,10);

}

A& operator = (const A& a)

{

If(this = &a)

Return *this

If(n!=NULL)

{

Delete n;

N=NULL;

}

N = new int[1];

Memcpy(n,n.a,10);

Return *this;

}

String构造函数

String(const char *str)

{

If(str == NULL)

{

M_data = new char[1];

*m_data = ‘\0’;

}else

{

Int len = strlen(str);

M_data = new char[lenth +1];

Strcpy(m_data,str);

}

}

~string()

{

Delete[] m_data;

}

String(const String& other)

{

Int len = strlen(other.m_data);

M_data = new char[len+1];

Strcpy(m_data,other.m_data);

}

时间: 2024-10-07 14:57:37

面试之C/C++的相关文章

面试宝典_Python.常规算法.0001.在圆圈和框框分别填入1~8数字各一次?

面试题目: 解题思路: 1. 总共8个位置,只要2个圈圈之差等于框框即可,注意倒数第3个数还要和第1个数字运算才算结束,所以可以先生成排列组合然后再通过分片偏移来获取符合条件的结果. 具体实现: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date    : 2016-12-24 12:19:01 # @Author  : 李满满 ([email protected]) # @Link    : http://xmdevops.blog.51

Web前端面试题目及答案汇总

前端新人在面试前都比较焦虑,担心回答不上面试官的问题,也担心自己紧张,其实这都是心理没底的表现,今天和大家分享web前端开发常见面试题及答案,希望可以帮助即将面试的前端同学顺利通过面试. HTML/CSS部分 1.什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分.这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或

Web前端面试指导(一):写好简历是面试成功的第一步

1.1 简历的作用 简历是求职找工作的敲门砖,优秀的简历更能获取面试的机会 简历是用人单位获取你个人信息的最直接的一种方式 如果没有简历,我们的工作不知从何早起. 1.2 初次写简历存在的困境 以前从来没有写过简历,不知道从哪里写起. 简历的内容不知道写什么,本来语文就不好. 简历写好了不知道可不可以,自己也拿捏不准. 简历常见问题 1)  个人信息简介不完整,甚至连性别都没有写 2)  专业技能描述太细,排序不合理 3)  项目太多或太少,项目描述内容太少, 4)  简历雷同 a)  样式雷同

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

【面试】iOS 开发面试题(二)

1. 我们说的oc是动态运行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

关于如何自学web前端以及一些面试的经验分享

自学怎么学好前端开发? 一千个人来回答这个问题有一千种答案,每个人的自学能力各不相同,适合我的方法不一定适合你.但是大家可以相互借鉴,苹果交换过后还是一个苹果,思想交换过后就是两种思想了.我这里把我的方法分享出来,多少也有一些借鉴的经验或者让你少走一些弯路. 有的人喜欢安静的一个人看书专研,有的人喜欢看网络视频教程,而我更偏向于后者,当然你时间充足的话看书加看视频效果更好.学习的主线视频是我花10块钱在某宝上淘的,这套视频是传智播客2015.12-2016.3期间实体班的全程录像,很新,最主要的

JAVA面试必备的知识宝典(一)

相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或者重写它来实现的. 灵活性: 简化性: 代码中如何实现多态 实现多态主要有以下三种方式: 1. 接口实现