c语言面试------基本概念

一、关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用;

1、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变

2、在模块内(函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但是不能被模块外其他函数访问。

3、在模块内,一个被声明为静态的函数只可被这一模块内的其他函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

二、引用和指针的区别是什么

1、引用必须被初始化,指针不必

2、引用初始化以后不能被改变,指针可以改变所指的对象

3、不存在指向空值的引用,但是存在指向空值的指针


三、#include<file.h>和#include"file.h"的区别

前者是从standard library的路径寻找和引用file.h,而后者是从当前工作路径并引用file.h


四、全局变量和局部变量在内存中是否有区别

全局变量存储在静态数据区,局部变量存在堆栈中


五、什么事平衡二叉树

左右子树都是平衡二叉树,且左右子树的深度差值的绝对值不大于1


六、堆栈溢出一般是有什么原因导致的

1、没有回收垃圾资源

2、层次太深的递归调用


七、什么函数不能声明为虚函数

constructor


八、局部变量能否和全部变量重名

能,局部变量会屏蔽全局变量。要用全局变量,需要使用双冒号

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。


九、如何饮用一个已经定义过的全局变量

可以用饮用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。


十、全局变量可不可以定义在可被多个.c文件包含的头文件中


十一、static全局变量、局部变量、函数与普通全局变量、局部变量、函数有什么区别

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者的区别就在于普通全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,普通全局变量在各个源文件中都是有效的。而静态全局变量则限制了作用域,即只在定义该变量的源文件中有效,在同一源程序中其他源文件中不能使用。

局部变量改变成为静态局部变量后改变了它的存储方式。

static函数与普通函数作用域不同。???


十一、程序的内存分配

一个由c编译的程序占用的内存分为以下几个部分

1、栈区(stack),由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

2、堆区(heap),一般由程序员分配释放

3、全局区(静态区),全局变量和静态变量的存储是放在一块的

4、文字常量区,

5,程序代码区,存放函数体的二进制代码


十二、解释堆和栈的区别

1、申请方式:stack由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间

heap需要程序员自己申请,并指明大小,在c中malloc函数

p=(char*)malloc(10)


十三、什么是预编译,何时需要预编译

预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令只是了再程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。


十四、关键字volatile有什么含义,并给出三个不同的例子

一个定义为volatile的变量时说这个变量可能会被意想不到的改变,这样,编译器就不会去假设这个变量的值了。精确的说就是,优化器在用到这个变量时必须每次都小心的重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1、并行设备的硬件寄存器(如:状态寄存器)

2、多线程应用中被几个任务共享的变量

那么1、一个参数既可以是const还可以是volatile嘛,为什么

可以,一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它


十五、结构与联合有什么区别

1、结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所有成员都存在(不同成员的存放地址不同)

2、对于联合的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,对于结构的不同成员赋值是互不影响的。


十六、描述内存分配方式以及它们的区别

1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值