day9

发布时间 2023-08-27 21:56:54作者: skural

1.简述c语言和c++的区别?
1)c语言是面向过程的语言,是结构化语言,考虑如何通过一个过程对输入进行处理来得到输出的结果;c++是面向对象的语言,主要特征是“封装、继承和多态”,封装就是以及隐藏内部的实现细节,使得代码模块化。继承就是派生类可以继承父类的数据和方法,扩展了父类中以及存在的模块,实现了代码的重用。多态就是“一个接口,多种实现”,通过派生类重写父类的虚函数,实现了接口的重用,

2)c和c++中动态管理内存的方式不一样,c是用malloc/free,而c++是用new和delete关键字

3)c++中有引用,c中不存在引用的概念

2.指针和引用的区别?
1)指针可以被重新赋值给另外一个不同的对象,而引用总是指向在初始化指定的对象,以后不能改变,但是指向的对象的内容可以改变

2)从内存内配上看,程序为指针变量分配内存空间,而不为引用分配内存,引用初始化时必须指向一个对象,引用与这个对象共享内存空间。

3)从编译上看,程序在编译时分别将指针和引用添加到 符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而 引用在符号表上对应的地址值为 引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说 引用可以被认为是不能改变的指针。

4)不存在指向空值的引用这个事实,意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

5)理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
int** p1; // 合法。指向指针的指针
int*& p2; // 合法。指向指针的引用
int&* p3; // 非法。指向引用的指针是非法的
int&& p4; // 非法。指向引用的引用是非法的
注意上述读法是 从左到右

3.结构体和共同体的区别?
结构体:将不同类型的数据组合成一个整体,是自定义类型
共同体:不同类型的几个变量共同占用一段内存

结构体中的每个成员都有自己独立的地址,他们是同时存在的

共同体中的成员占用同一段内存,他们不能同时存在

sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长度、

 

4.#define和const的区别?
1.define定义的常量没有类型,是个立即数,const定义的常量有类型名字,存放在静态区域

2.处理阶段不同,#define定义的宏变量在预处理时进行替换,可以有多个拷贝,const定义的变量在编译时确定值,只有一个拷贝

3.#define定义的常量不可以用指针去指向,而const定义的常量可以用指针去指向

4.#define可以定义简单的函数,而const不可以定义简单的函数

 

5.new、delete和malloc、free的区别?
1)malloc对分配的内存空间大小严格规定的,而new不需要

2)new为对象开辟空间时,会调用对象的构造函数,delete为对象释放空间时,会调用析构函数