考研复习C/C++基础知识点(八)

1、malloc,calloc,realloc,free的区别

① malloc,calloc,realloc,free属于C函数库,new/delete则是C++函数库;

② 多个-alloc的比较:

    alloc:唯一在栈上申请内存的,无需释放;

    malloc:在堆上申请内存,最常用;

    calloc:malloc+初始化为0;

    realloc:将原本申请的内存区域扩容,参数size大小即为扩容后大小,因此此函数要求size大小必须大于ptr内存大小。

2、重载,覆盖,隐藏的区别。

a.成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

b.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

3、struct和class的区别

相同点:可以有数据成员,方法,构造函数等。

4、Set和Vctor的区别

Set是一种 关联容器 ,它用于存储数据,并且能从一个数据集合中取出数据。它的每个元素的值必须唯一,而且 系统会根据该值来自动将数据排序 。每个元素的值不能直接被改变。 【重点】内部结构采用 红黑树的平衡二叉树 。multiset 跟set 类似,唯一的区别是允许键值重复!!!

红黑树的操作时间跟二叉查找树的时间复杂度是一样的,执行查找、插入、删除等操作的时间复杂度为O(logn)。
红黑树是特殊的AVL树,遵循红定理和黑定理 红定理:不能有两个相连的红节点 黑定理:根节点必须是黑节点,而且所有节点通向NULL的路径上,所经过的黑节点的个数必须相等

vector就是动态数组.它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存.

它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。

5、C语言中volatile关键字有什么特点?

使用volatile关键字声明的变量,系统总是重新从它所在的内存中读取数据,即使它前面的指令刚刚从该处读取过数据,而且读取的数据立刻被保存;相反,若没有使用volatile,编译器可能会做优化处理,可能暂时使用寄存器中的值,而如果该变量由别的程序更新了的话,将会出现不一致的现象!!

总结起来就是:

1. 编译器会禁止对 volatile 修饰的变量做读写优化
2. 每次使用该变量时,系统都会重新从它所在内存中读取数据
3. 这相对于做了读取优化的变量来说,速度当然是慢了一些

6、假定编译器不做优化,对一个int型变量k,做前缀自加和后缀自加,哪个执行速度更快?

因为++k运算结束后,k的值和表达式的值相同。 而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的变量来保存k++表达式的值。 所以说:++k更快

7、在64位系统下,分别定义如下两个变量:char *p[10]; char(*p1)[10];请问,sizeof(p)和sizeof (p1)分别值为?

重点理解p跟谁结合了,跟[]结合,则p就是一个数组;跟*结合,p就是一个指针。

首先[]()的优先级一样,均大于*

char *p[10],p与[]结合,所以p就是一个数组,数组的元素比较特殊,是指针,指针大小为8,所以是10*8=80;

char(*p1)[10],与*结合,所以是一个指针,大小为8

8、运算符重载需要注意的要点。

运算符的重载有以下几点需要注意:

1.不是所有的运算符都能被重载。

2.重载不能改变运算符的优先级和结合性

3.重载不会改变运算符的用法,原有有几个操作数、操作数在左边还是在右边,这些都不会改变

4.运算符重载函数不能有默认的参数

5.运算符重载函数既可以作为类的成员函数,也可以作为全局函数

6.箭头运算符->、下标运算符[ ]、函数调用运算符( )、赋值运算符=只能以成员函数的形式重载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值