考研复试常见问题(C/C++、Java)

C语言与C++的主要区别:

        C语言是面向过程编程的典范,C语言以过程为中心,用算法进行驱动。C++是继承C语言而来的,不仅包含面向过程编程,也包含了面向对象编程,支持类、封装、继承、多态等特性。

指针与变量的自增自减有何区别:

        指针的自增自减改变的是所指向的内存地址,而变量的自增自减改变的是变量的值

宏定义是什么:

        宏定义是C++的预处理指令之一,它主要完成一个替换操作,在程序中遇到该符号时,自动替换其值,不占内存和编译时间。

引用与值传递的区别:

        值传递只是在函数中复制了一个该变量的副本,对该副本进行修改并不影响原变量。引用传递的是将该变量的内存地址传入函数中,实参的值会随着形参值的变化而变化。

指针与引用的区别:

        指针可以为空,但引用不可以为空;指针可以随意改变指向的地址,但引用在初始化后不能再修改;程序需要对指针开辟内存空间,但不需要给引用开辟内存空间,所以指针的自增自减修改的是所指向的地址,但引用的自增自减修改的是对应变量的值。

类和结构体的区别:

        结构体存储在栈中,而类的实例可以在栈中,也可以在堆中;结构体可以由构造函数,但没有析构函数,类一定有构造函数,也可以有析构函数;类可以继承,结构体不可以继承。

解释与编译的区别:

        二者的主要区别在于何时生成CPU可直接运行的代码,这种说法并不严谨,但是便于理解。

        编译型语言,例如C/C++,在编译时就直接生成了CPU可直接运行的代码,这就意味着在ARM CPU上编译好的代码,在X86 CPU上不一定能执行,即可移植性差。

        而解释性语言,例如Python、Java,也有一个编译的过程,但此次编译生成的不是CPU能直接运行的代码,而是一种中间代码,需要一个虚拟平台(例如JVM)来运行这种中间代码,这种中间代码在运行的过程中才会被翻译成CPU能直接运行的代码。

        用一个网上看过的例子来说明就是,编译相当于做好了一桌子菜直接吃,而解释相当于吃火锅,需要一边涮一边吃。

Java与C++的区别:

        Java是由c++发展而来的,取其精华去其糟粕,Java更加简洁工整,但效率也随之下降。

        Java没有指针的概念,因为从C/C++在操作指针时经常会出错,例如指针空指了程序就容易崩溃。Java中没有指针也就防止了一系列的操作错误,更有利于Java的安全。

        Java不支持多重继承,多重继承即一个子类允许继承多个父类,虽然多重继承功能很强大,但使用复杂,有可能会引起很多麻烦。

        Java是完全面向对象的语言,所有数据和方法都必须在类中。除了基本数据类型,其余类型的数据都是对象型数据。

        Java自动进行内存回收操作,不再需要我们手动删除。c++和Java中的对象都是new出来的,但c++需要手动删除,Java只需要在使用完后添加删除标签即可。

        综上所述,Java以他的安全工整、耦合性低,更适合大型企业级的应用开发,而C++以其强大的运行效率,更适合于底层应用开发。

你可能感兴趣的:(考研复试)