C语言面试题目汇总(持续更新)
Posted ralap7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言面试题目汇总(持续更新)相关的知识,希望对你有一定的参考价值。
1、堆栈溢出一般是由什么原因导致的?
这个问题感觉分开来讨论比较好。
首先说栈溢出:
(1)我们都知道局部变量存在栈中,要是在局部变量中存储了一个很大的数组,有可能导致栈溢出。
(2)还有就是函数的参数也是存在栈里面,传递参数时尽量使用指针,要是一粗心将一个很大的数组作为参数传入,就有可能导致栈溢出。
(3)函数的调用层次太深,最坏的情况是无限递归调用。函数递归调用时,系统要在栈中不断保存函数调用时的现场和变量,要是调用层次太深,也可能出现栈溢出。
再谈谈堆溢出:
C不像python这种高级语言,C没有垃圾资源自动回收机制,堆也不像栈那样,由编译器自动分配和释放,堆是手动分配释放的。如果动态申请空间后不及时释放,这种情况可能会导致堆溢出。
2、指针和引用的区别与联系?
int x = 20;
int &b = a;(等价于int * const b = &a)
相同点:
可以说引用相当于指针,引用和指针在编译时的方法一样,指向的都是变量的内存地址。
不同点:
(1)引用存储的是变量值,而指针是指向一个变量,存储的是地址
(2)引用必须被初始化,也就是只能对已经存在的变量或对象实现引用,而指针不需要,指针可以为空
(3)引用不需要分配单独的内存空间,他是直接访问变量;指针是间接访问,需要单独分配内存空间。
以上是关于C语言面试题目汇总(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章