1.函数默认参数的两个规则:
(1)解析由最右边开始,如果我们为某个参数提供了默认值,那么这一参数右侧的所有参数都必须具有默认值
(2)默认值只能指定一次,可以在函数声明处,也可以在函数定义处
2.内联函数:
(1)在编译的时候将指定的函数体插入并取代每一处调用该函数的地方(上下文),而不是将流程转出去,从而节省了每次调用函数带来的额外时间开支
(2)与普通函数区别(存疑),两者的区别在于替换的时机不一样,内联函数在代码编译时就把所有该替换的地方替换好了,而普通的函数要在代码执行的时候才去替换
(3)适用条件:函数代码量小,调用频繁
3.数组的本质是一块连续存储的内存区域,数组名的本质是一个指向数组中第一个元素的常量指针
4.声明与定义
(1)定义:特殊的声明,它创建了一个对象
(2)extern声明:简单的说明了在其它地方创建的对象的名字,它允许你使用这个名字
5.函数指针与指针函数区分
(1)函数指针:可以指向具有所列返回类型和参数列表的任何一个函数的指针
(2)指针函数:返回值是指针的函数
6.c与c++的区别
(1)设计思想:C++面向对象,考虑的是如何通过构造一个对象模型,让这个模型能够解决对应的问题;而C是面向过程,考虑的是如何通过一个过程,对输入进行运算处理,得到输出
(2)范围:c是c++的一个子集
(3)语法:①C++具有封装、继承和多态三种特性;②C++相比C,增加多许多类型安全的功能,比如强制类型转换;③C++支持范式编程,比如模板类、函数模板等
7.堆内存和栈内存的区别:
(1)空间大小不同:堆内存大(G),栈内存小(M)
(2)管理方式不同:堆内存由程序员管理,通过new和delete分配和释放内存。栈内存由编译器自动管理,分为静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由allocator函数进行分配,由编译器自行释放
(3)碎片问题(可用的内存空间不是连续的,而是一小段一小段地存在,导致不能有效利用):对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列。
(4)分配效率不同:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,没有专门的系统支持,效率低。