c语言面试------基本概念
2014-11-07 12:39
344 查看
一、关键字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、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
在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、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
相关文章推荐
- java程序员面试复习资料2——[JAVA基本概念]
- C语言中的一些基本概念
- C语言基本概念理解
- iOS面试攻略下篇:Objective-C面试题和基本概念(1)
- 程序设计基石与实践之C语言基本概念
- C#.Net的常见面试试题(3)——ASP.NET基本概念
- C语言基本概念(8)
- C语言基本概念(7)
- C语言中文件的基本概念 笔记
- SQL基本概念--面试必读
- 重学C语言 一些基本概念
- C#.Net的常见面试试题(1)——基本概念
- C语言基本概念——简单函数
- C语言基本概念(5)
- 《C现代方法》第二章:C语言基本概念 (1)
- C语言程序设计-现代方法----示例及练习题----第二章--C语言基本概念
- C语言的基本概念
- ios面试相关基本概念
- 面试指南 笔记(一)基本概念
- C语言 第一章 程序设计的基本概念