C++面试题(上)

C++面试题(上)

1.链表和顺序表的优缺点以及使用场景

1)顺序表存储
原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度
优点:存取速度高效,通过下标来直接存储,访问速度快,通过下标访问
缺点:a.插入和删除比较慢,b.不可以增长长度
比如:插入或者删除一个元素时,整个表需要遍历或移动元素来重新排一次顺序
  2)链表存储
原理:链表存储是在程序运行过程中动态的分配空间,只要存储器还有空间,就不会发生存储溢出问题
优点:插入和删除速度快,保留原有的物理顺序,比如:插入或者删除一个元素时,只需要改变指针指向即可
缺点:查找速度慢,因为查找时,需要循环链表访问
  3)应用场景:频繁的查找却很少的插入和删除操作可以用顺序表存储,如果频繁的插入和删除操作很少的查询就可以使用链表存储

2.什么是缺省参数

定义所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。
  缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。 缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是 nil;至于记录类型,则根本不能用作缺省参数。 缺省参数必须通过值参或常参传递。声明是带有缺省参数的函数,则缺省值只能写在声明当中。

1). 如果函数已经带有缺省参数的函数原型声明,则在该函数的定义中不允许出现缺省值。
  2). 一旦为函数的某个参数指定了缺省值,则必须为后续参数也定义缺省值,从右到左定义缺省参数。
void showmessage(char *text,int length=1,int color ) ; //错color也应定义缺省值。
  3). 调用函数时,如果略去一个参数传递,则略去后续所有参数传递,调用时将参数从左至右,逐一传递给行参。
  showmessage(“hello”);
  showmessage(“hello”,5);
  showmessage(“hello”,5,8);
  showmessage(“hello”, ,8); // 错误

3.什么是引用,引用与指针的区别

指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
程序为指针变量分配内存区域,而不为引用分配内存区域。
  1)指针使用时要在前加 * ,引用可以直接使用。
  2)引用在定义时就被初始化,之后无法改变;指针可以发生改变。 即引用的对象不能改变,指针的对象可以改变。
  3)没有空引用,但有空指针。这使得使用引用的代码效率比使用指针的更高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
  4)对引用使用“sizeof”得到的是变量的大小,对指针使用“sizeof”得到的是变量的地址的大小。
  5)理论上指针的级数没有限制,但引用只有一级。即不存在引用的引用,但可以有指针的指针。
  int **p //合法
  int &&p //非法
  6)++引用与++指针的效果不一样。
  例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。

4.什么是函数重载,函数重载底层是怎么实现的? C语言中为什么不能支持函数重载?extern “C” 是什么意思?

什么是函数重载?
  函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数、类型、顺序)的函数,这组函数被称为重载函数。重载函数通常用来声明一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
  
  函数重载底层如何实现?
  在C++的底层,有重命名机制,比如下面这个函数。
  实现一个加法函数,可以对int型、double型、long型进行加法运算。在C++中,我们可以这样做:

#include<iostream>
using namespace std;
int Add(int left, int right)
{
	return left + right;
}
 
double Add
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值