面试试题(二)


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版本的函数~更多函数重载的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值