C/C++面试题目集锦

1、指针与引用的区别

从四个方面出发考虑不同点

(1)从定义出发,指针是一个变量,所存内容为指向变量在内存中的存储地址;而引用只是原变量的一个别名,和原变量占同一个存储单元。

(2)初始化:指针可以初始化为NULL,可以改变指向的内容;而引用不可以,在使用时必须初始化,且初始化后不能改变。

(3)使用:在使用时,指针可以多级(**p),而引用只能一级;引用使用时无需解引用(*),指针需要解引用。

(4)大小:"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小

2.堆和栈的区别

2.1 概念

堆、栈是一种数据按序排列的数据结构。

在一个由C/C++编译的程序占用的内存分为四部分:栈区、堆区、静态存储区、代码区。

2.2 区别

(1)堆栈空间分配

   栈:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

   堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。在运行时动态分配内存。  

(2)堆栈缓存方式

   栈:一级缓存,使用完立即释放。

   堆:二级缓存

(3)堆栈数据结构区别

栈:栈是一种后进先出的数据结构。

堆:可以看成是一棵树。

(4)申请大小的限制

栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意  
  思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有  
  的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将  
  提示overflow。因此,能从栈获得的空间较小。    
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储  
  的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小  
  受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。    

但是容易产生碎片。

 

posted @ 2017-10-25 10:32  Miss.Bueno  阅读(204)  评论(0编辑  收藏  举报