c,,面试的知识点

上传人:bin****86 文档编号:56672205 上传时间:2018-10-14 格式:DOCX 页数:25 大小:27.01KB
返回 下载 相关 举报
c,,面试的知识点_第1页
第1页 / 共25页
c,,面试的知识点_第2页
第2页 / 共25页
c,,面试的知识点_第3页
第3页 / 共25页
c,,面试的知识点_第4页
第4页 / 共25页
c,,面试的知识点_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《c,,面试的知识点》由会员分享,可在线阅读,更多相关《c,,面试的知识点(25页珍藏版)》请在金锄头文库上搜索。

1、c,c,面试的知识点面试的知识点篇一:C 语言面试重点CSDN:C 语言面试重点-绝对好:融合了很多 C 语言的基本问题,基本概念,能有效应付面试。1816833 c 语言中 static 用法总结 一、c 程序存储空间布局 C 程序一直由下列部分组成: 1)正文段CPU 执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss 段)在程序中没有初始化的全局变量;内核将此段初始化为 0. 4)栈增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地

2、址;环境信息) 。5)堆动态存储分。 |-| | |-| | 栈 | |-| | | | | |/| | | | /| | | | |-| | 堆 | |-| | 未初始化| |-| | 初始化| |-| |正文段 | |-| 二、 面向过程程序设计中的 static 1. 全局静态变量在全局变量之前加上关键字 static,全局变量就被定义成为一个全局静态变量。 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量会被程序自动初始化为 0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:全局静态变量在声明他的文件之外是不可见的。准确

3、地讲从定义之处开始到文件结尾。 看下面关于作用域的程序: 文件分别编译通过,但 link 的时候中的变量 n 找不到定义,产生错误。 定义全局静态变量的好处:不会被其他文件所访问,修改 其他文件中可以使用相同名字的变量,不会发生冲突。2. 局部静态变量 在局部变量之前加上关键字 static,局部变量就被定义成为一个局部静态变量。 1)内存中的位置:静态存储区2)初始化:未经初始化的全局静态变量会被程序自动初始化为 0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。 注:当 static 用来修饰局部变量的时候

4、,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。 当 static 用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的) ,但是没有改变它的存放位置,还是在静态存储区中。 3. 静态函数 在函数的返回类型前加上关键字 static,函数就被定义成为静态函数。 函数的定义和声明默认情况下是 extern 的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。例如: 文件分别编译通过,但是连接的时候找不到函数staticdis()

5、的定义,产生错误。 定义静态函数的好处:其他文件中可以定义相同名字的函数,不会发生冲突 静态函数不能被其他文件所用。 存储说明符 auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto 和 register 对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。 关键字 extern 和 static 用来说明具有静态存储期的变量和函数。用 static 声明的局部变量具有静态存储持续期(static storage duration) ,或静态范围(static extent) 。

6、虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。 由于 static 变量的以上特性,可实现一些特定功能。1. 统计次数功能 声明函数的一个局部变量,并设为 static 类型,作为一个计数器,这样函数每次被调用的时候就可以进行计数。这是统计函数被调用次数的最好的办法,因为这个变量是和函数息息相关的,而函数可能在多个不同的地方被调用,所以从调用者的角度来统计比较困难。代码如下: 输出结果为: I have been called 1 times. I have been called 2 times. I have

7、been called 3 times. C+ 静态存储区 栈 堆的区别 很多人都觉得学习 C+是特别困难的事情。C学习是比较复杂的:它的内存分配、指针、以及面向对象思想的实现等等,确实需要一定的技术积累。我们将以专题的形式,为大家逐一剖析 c的技术重点和难点。 本专题讨论的就是内存分配。学习 c如果不了解内存分配是一件非常可悲的事情。而且,可以这样讲,一个 C程序员无法掌握内存、无法了解内存,是不能够成为一个合格的 C程序员的。 一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配

8、好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc 或 new 申请任意大小的内存,程序员自己负责在适当的时候用 free 或 delete 释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。 二、三者

9、之间的区别 我们通过代码段来看看对这样的三部分内存需要怎样的操作和不同,以及应该注意怎样的地方。 例一:静态存储区与栈区 篇二:C+面试相关知识点整理 Static 作用 1.在函数体内,static 修饰的变量的值在函数调用过程中维持不变; 2.在模块内(函数体外) ,static 修饰的变量(本地全局变量)作用域只在本模块内; 3.在模块内,static 修饰的函数,作用域只在本模块内部。 C+中static 1.成员变量:静态成员变量(数据成员)-所有对象共享一份数据 2.静态变量初始化须在类外。int A:i=0; 3.成员函数:静态成员函数。A:fn(); 4.静态成员函数不能访问非

10、静态成员变量。 (先有类才有对象) 5.静态内容是属于类的,非静态内容是属于对象的。 +中 static 修饰的成员变量是以全局变量的形式存在,不占类的内存。 7.一个空类占一个字节,以保证创建的对象占用不同的内存(对象唯一的) 。 Const 作用 Const 意味着“只读” 。 类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 2.可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 3.编译器通常不为普通 const 常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。4.可以节省空间,避免不

11、必要的内存分配。 Class VS struct 1.默认的继承访问权限:struct 是 public 的,class是 private 的。取决于子类。 作为数据结构的实现体,默认的数据访问控制是public 的;class 作为对象的实现体,默认的成员变量访问控制是 private 的。 3.“class”这个关键字还作用于定义模板参数,就像“typename” ,但关键字“struct”不用于定义模板参数。C VS C+ +引入了 bool 类型,封装了字符串 string 类; 2.引用:C+用引用代替传指针; 3.形参默认值:C+中函数形参可初始化默认值; 4.操作符重载:C+中可

12、对操作符重载,operatorxxx 5.结构体:C+中更多用类 class Singleton private: Singleton()cout Singleton(const Singleton public: Singleton()cout static Singleton* getInstance() return void show()cout ; Singleton Singleton: s ; int main() Singleton* ps1=Singleton:getInstance(); Singleton* ps2=Singleton:getInstance(); cou

13、t ps1-show(); ps2-show(); return 0; 拥有纯虚函数的类抽象类(本身不能实例化不能直接产生对象) void eat(Food/纯虚函数 2.纯虚函数:只有函数声明,没有函数实现。 3.含有纯虚函数的类就叫抽象类。 4.抽象类不允许直接创建抽象类的对象,只能用来指向或引用子类对象。 虚函数 1.为了实现多态(继承、覆盖、虚函数、指针或引用)而存在,有代价。 2.只要类中有虚函数(个数不定) ,就多四个字节,虚函数表指针。 友员函数和友员类 Friend As Bridges。不是成员。可以写在类里面。 1.两部分:友员函数、友员类。 2.内部授权,不是成员,声明不

14、受访问修饰符号的影响,没有 this。声明和定义可以不分开。 3.友员关系不能翻转,不能传递、也不能继承。 void access(const C/友员函数 class D;/友员类6.加 const,只能访问,不能修改。 运算符重载 1.实现运算符重载,就是编写相应的运算符函数,函数名为:(operatorxxx) 。 2.实现方式: 3.友员方式、成员方式。 d+=1; return *this;/返回自己 可以重载 C+中除下列运算符外的所有运算符 1.成员运算符:. 2.指针取内容运算法:* 3.作用域分辨符:: 4.三目运算符:? : () 三原则rule of three:如果类需要析构函数,则它也需要赋值操作符和复制构造函数。 IO 流 IO 结构:类 顶层:ios Console: istream(cin) ostream(cout)- iostream(head) File: ifstream(fin) ofstream(fout)- fstream(head) String: istringstream(sin/iss) ostringstream(sout/oss)-stringstream(head:sstream) io 流的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号