1.inline的作用
inline函数不像正常函数在调用时存在压栈和call的操作,它会把程序代码直接嵌入到调用代码段中,也就是说使用inline函数会增大二进制程序的体积,但是会使执行速度加快。
同时,编译期间可以对参数进行强类型的检查,这是inline优于宏的一个方面。
详细的解释见 关于C/C++中的inline
2.二维数组的表示
(1)数组的形式 int a[3][5];
(2)指针的形式 int *p = malloc(sizeof(int )*3*5);
3.ifndef的作用
条件编译的语法,一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
关于在头文件中的详细应用,看 参考网址[5] #ifndef/#define/#endif
4.KMP算法
字符串匹配的高级算法(具体的讲解和实现见blog 字符串匹配(KMP算法 含代码))
5.函数调用方式
(1)函数调用介绍
调用函数的时候,计算机常用栈来存储传递给函数的参数。
栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入数据,这个操作称为入栈(push),压栈后,栈顶自动变成新加入数据项的位置,栈顶指针也随之修改。用户也可以从堆栈中取走栈顶,称为出栈(pop),弹出栈后,栈顶下的一个元素变成栈顶,栈顶指针随之修改。
函数调用的时候,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者是调用者、或者函数本身修改堆栈,使堆栈恢复原状。
参数传递中,有两个重要的问题需要说明:
A、当参数个数多于一个时,按照什么顺序把参数压入堆栈
B、函数调用后,由谁来把堆栈恢复原状。
(2)函数调用的时候主要有几种调用方法,主要分为C式,Pascal式。在C和C++中C式调用是缺省的,类的成员函数缺省调用为 _stdcall。
- __cdecl 堆栈由调用者清除 参数从右至左的顺序压入堆栈内函数名自动加前导下划线
- __stdcall 堆栈由被调用者清除 参数从右至左的顺序压入堆栈内函数名自动加前导下划线,后面紧跟着一个@,其后是参数的尺寸
- __fastcall 堆栈由被调用者清除 部分参数保存在寄存器中,然后其他的压入堆栈内函数名自动加前导下划线,后面紧跟着一个@,其后是参数的尺寸
- thiscall(非关键字) 参数从右向左压入栈。如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数亚茹栈后被压入栈。参数个数不定的,由调用者清理堆栈,否则由函数自己清理堆栈。
6.重载函数
函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。不能利用返回类型进行重载!类中函数const和非const可以进行重载,其实原理是利用this指针的类型是const和非const进行重载,其实原理就是参数类型不同,const指针or const引用调用的为const版本的函数~更多函数重载的知识。