现在的位置: 首页 > 综合 > 正文

经常被忽略的知识点

2019年05月17日 ⁄ 综合 ⁄ 共 1430字 ⁄ 字号 评论关闭

1、在C语言中,关键字static的作用是什么?
(1)在函数体内,一个被声明为静态的变量在函数被调用过程中其值为上次使用后保存的值。
(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但是不能被模块外其它函数访问,它是一个本地全局变量。

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

2、const关键字的作用。
(1)关键字const可以为看代码的人传递非常有用的信息,实际上,声明一个参数为常量是为了告诉用户这个参数的应用目的。
(2)使用关键字const能够使优化器参生更加高效的代码。
(3)关键字const可以使编译器保护那些不希望被修改的参数,防止其被无意的修改,可以减少bug的出现。

3、内联函数有什么作用?它和宏定义的区别是什么?

引入内联函数的目的是解决程序中函数调用的效率问题。
区别:(1)宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏,而inline是一个函数,它在编译中不是单独产生代码,而是将有关代码嵌入到调用处。
(2)宏在替换的时候只是简单的文字替换,不对参数类型进行检查,而内联函数则需要进行参数类型的检查。
(3)宏在编译之前进行,即先用宏体替换宏名,然后再进行编译。而内联函数显然是先编译,在执行的时候才调用。

因此,宏占用的是编译的时间,而内联函数占用的是执行时的时间。宏的参数是不占内存空间的,因为只做字符串的替换,而内联函数的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的。

4、简述extern关键字的作用,说明什么情况下使用extern.
(1)如果函数的声明中带有关键字extern,说明这个函数有可能使定义在别的文件中,这样的好处是可以在程序中取代include “*.h”,在一些比较复杂的项目中比较方便。

(2)C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个函数中间名。而C语言则不会,因此会造成连接时找不到对应函数的问题。此时C语言就需要extern C 进行连接指定,这告诉编译器,请保持C语言原来的名称,不要生成用于连接的中间函数名。

5、数组和链表的区别。
(1)数组:数据顺序存储,固定大小,便于查找。

(2)链表:数据可以随机存储,大小可动态变化,便于插入和删除。

6、指针和引用有什么区别。
(1)引用在创建的时候必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值。
(2)不存在NULL的引用,应用必须与合法的存储单元关联;而指针是可以为NULL。
(3)引用一旦被初始化为指向一个对象,它就不可能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另外一个对象,给引用赋值并不是改变它和原来对象的绑定关系。
(4)引用的创建和撤销并不会调用类的拷贝构造函数;而指针则会调用类的拷贝构造函数。
(5)语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,不过编译器帮我们完成了转化,不存在空引用,并且引用一旦被初始化为指向一个对象,它就不可能被改变为另一个对象的引用,显得很安全;而指针在delete之后如果没有赋值为NULL,就很有可能产生野指针,const指针依然存在空指针,也有可能产生野指针。
总的来说,引用既具有指针的效率,又具有变量使用的方便性和直观性。

抱歉!评论已关闭.