码迷,mamicode.com
首页 > 编程语言 > 详细

C语言面试题目汇总(持续更新)

时间:2018-05-18 11:30:16      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:内存地址   参数   编译器   汇总   手动   空间   情况   没有   回收机制   

1、堆栈溢出一般是由什么原因导致的?

 这个问题感觉分开来讨论比较好。

首先说栈溢出:

(1)我们都知道局部变量存在栈中,要是在局部变量中存储了一个很大的数组,有可能导致栈溢出。

(2)还有就是函数的参数也是存在栈里面,传递参数时尽量使用指针,要是一粗心将一个很大的数组作为参数传入,就有可能导致栈溢出。

(3)函数的调用层次太深,最坏的情况是无限递归调用。函数递归调用时,系统要在栈中不断保存函数调用时的现场和变量,要是调用层次太深,也可能出现栈溢出。

再谈谈堆溢出:

C不像python这种高级语言,C没有垃圾资源自动回收机制,堆也不像栈那样,由编译器自动分配和释放,堆是手动分配释放的。如果动态申请空间后不及时释放,这种情况可能会导致堆溢出。

2、指针和引用的区别与联系?

int x = 20;

int &b = a;(等价于int * const b = &a)

相同点:

可以说引用相当于指针,引用和指针在编译时的方法一样,指向的都是变量的内存地址。

不同点:

(1)引用存储的是变量值,而指针是指向一个变量,存储的是地址

(2)引用必须被初始化,也就是只能对已经存在的变量或对象实现引用,而指针不需要,指针可以为空

(3)引用不需要分配单独的内存空间,他是直接访问变量;指针是间接访问,需要单独分配内存空间。

 

C语言面试题目汇总(持续更新)

标签:内存地址   参数   编译器   汇总   手动   空间   情况   没有   回收机制   

原文地址:https://www.cnblogs.com/ralap7/p/9054848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!