1 / 14
文档名称:

重要知识点整理.docx

格式:docx   大小:140KB   页数:14页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

重要知识点整理.docx

上传人:63229029 2017/5/31 文件大小:140 KB

下载得到文件列表

重要知识点整理.docx

相关文档

文档介绍

文档介绍:笔试面试中 C/C++ 重要知识点整理(不定期更新) C++ 语言中的优先级规则 C语言中语言声明的优先级规则如下(以后分析的基础): A声明从它的第一个名字开始读取,然后按照优先级顺序依次读取 B优先级从高到低依次是 : 括号()表示这是一个函数方括号[]表示这是一个数组 : 星号*表示“指向……的指针”下面我们使用上述规则来分析以下例子(1) char * const *(*next)(); (2) char* (*c[10])(int **p) 一步步分析:先分析括号里面的内容,我们知道 C是一个数组,保存的是“…..的指针”然后根据规则 B,要先分析后缀,得到指针是一个函数指针。该函数参数为 P返回值为 char* 。最后得到:C是一个数组元素,它的元素类型是函数指针,其所指向的函数的返回值是一个指向 char 的指针。(3) void(*signal(int sig,void(*func)(int)))(int); 从 signal 所在的括号开始提取: void(*signal( ) )(int); 首先 signal 后缀跟的是括号,我们得到 signa l是一个函数,然后得到前缀为*表示此函数返回的是一个”……指针”…………最后得到 signa l是一个函数, 返回函数指针,函数所指向的指针接受一个 int类型的参数并且返回 void 。然后我们看 signal 函数参数本身: void(*func)(int) 表示 func 是一个函数指针,此指针指向的函数接收一个 int参数,返回值是 void 。如果我们定义 typedef void(*ptr_to_func)(int) 则表示 ptr_to_func 是一个函数指针,该函数接受一个 int参数,返回值为 void 那么上述函数可以写为 ptr_to_funcsignal(int sig, ptr_to_func); 表示 signal 是一个函数,接收参数为 int和 ptr_to_func ,返回 ptr_to_func ; 2. typedef int x[10] 与#define x int[10] 的区别 typedef 与宏文本替换之间存在关键性的区别。如下: 第一: 可以用其他类型说明符对宏名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下: #define peach int unsigned peach i; //可以 typedef int banana; unsigned banana i; //错误第二:在连续声明的变量中用 typedef 定义的类型能够保证声明中所有变量均同一种类型,而用#defin e 定义的类型却无法保证。如下: #define int_ptr int* int_ptr chalk, cheese; 经过宏扩展,第二行变为: int *chalk, cheese; 这使得 chalk 与 cheese 为不同的类型。 chalk 为 int类型的指针,而 cheese 只是 int类型变量。 typedef char * char_ptr; char_ptr Benley, Royce ; Benley, 和 Royce 类型是相同的。都是指向 char 的指针原因: #define 在编译时仅仅是名称替换而 typedef 可以被看成一个彻底封装的“类型”。在了解 typedef 中变量具体表达什么意思的时候可以按照前面说的优先级规则进行解析。 typedef typedef 中使用指针往往带来意外的结果。例: typedef string *pstring; const pstring cstr; c_str 究竟代表什么类型。我们知道 pstring 是指向 string 的指针很多人都会误认为真正的类型是 const string* cstr 。错误原因是将 typedef 当成#define 直接进行文本扩展了,其实 const 修饰的是 pstring 而 pstring 是一个指针,因此,正确的等价形式应该是 string *const cstr; 类接口与实现的概念: 每个类都定义了一个接口(可以不是很确切的理解为类中访问级别为 publi c的函数为接口)和一个实现。接口由使用该类的代码需要执行的操作组成。实现一般包括该类所需要的数据。实现还包括定义该类需要的但又不供一般性使用的函数。定义类时,通常先要定义该类的接口,即该类所提供的操作。通过这些操作,可以决定该类完成其功能所需要的数据,以及是否需要定义一些函数来支持该类的实现。 public 派生类继承基类