导航菜单
首页 >  考研复试程序  > 计算机考研复试

计算机考研复试

Q:C和C++还有java的区别

Q:指针和引用的区别?1.指针是一个存储地址的变量,该地址为内存的一个存储单元;引用是原变量的一个别名;2.指针可以为空,而引用不能为空;3.指针可以有多级,而引用只能有一级;4指针可以重新赋值,而引用只能初始化一次5.sizeof引用得到的是变量大小,而sizeof指针得到的是指针本身大小将引用作为函数返回值的好处是?在内存中不会产生被返回值的副本,同时不能返回局部变量的引用,因为随着调用结束局部变量会被销毁。

Q:三种传参方式?

值传递:传递的是实参的一个拷贝,修改形参不会改变实参值。地址传递:传递的是实参地址的一个拷贝,修改形参不会改变实参值。引用传递:传递的是实参的一个别名,修改形参会导致改变实参。被调用函数的形参只有在被调用时才会临时分配存储单元,一旦调用结束则释放内存。Q:const作用?被const修饰符修饰的变量不能被修改。const *x表明x数据是常量,不能修改;*const x表明指针本身是常量,x的指针不能指向其他内存地址,x本身可被修改;*const *x表明x本身数据和地址都不能被修改。

Q:static作用?被static修饰符修饰的变量在整个文件中都是可见的,而在文件外是不可见的。该变量在全局数据区分配内存。C++中由程序运行new出的动态数据存放在堆区,而函数内部局部变量存放在栈区。静态局部变量:在函数内部定义static变量,第一次运行到这里初始化,存储到全局数据区,下一次执行到这里不会再重新初始化。static变量如果没有显式初始化,默认初始值为0。 静态函数不能被其他函数所调用。

Q:面向对象的三个要素(基本特征)?1、封装:将客观事物封装成类,隐藏实现细节,模块化代码。2、多态:实现多态的两种方式——覆盖(重写)和重载。覆盖是子类重新定义父类的虚函数,与多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。重载是存在多个同名函数,但是函数的参数个数不同。这些函数实际上成为了不同的函数,对它们的调用在编译期间就已经确定,属于早绑定,与多态无关。3、继承:子类继承父类功能,对父类功能进行扩展。

Q:结构体和联合有什么区别?(1). 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。(2). 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

Q:C++是不是类型安全的语言?不是。不同类型间指针可以强制互转。

Q:const与#define区别?

(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 (3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const定义的只读变量在程序运行过程中只有一份备份。(4)从代码调试的方便程度而言: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了。

Q:基类的析构函数为什么是虚函数?为了防止派生类析构函数未执行,造成资源泄露。

Q:#include尖括号和双引号区别?是标准头文件,“”是非系统头文件

Q:为什么有了指针,还要使用引用?为了支持运算符的重载。更加方便。

Q:如何避免野指针?

相关推荐: