一,C语言中的结构体 和 C++语言中结构体的区别
1.C++语言中的 struct 可以省略,但是C语言不行。
2.C语言中的结构体只能定义成员变量,但是不能定义成员函数。然而在C++中既可以定义成员变量又可以定义成员函数, C++中的结构体和类体现了数据结构和算法的结合。
3.如果C语言中的结构体为空话,那么会报错。
4.总的来说C语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程。
在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。
在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private
二,C++中的结构体与类中的结构体的区别
首先:在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数
相同点:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
不同点:对于成员函数的访问权限以及继承方式,class默认是private类型的,struct默认是public类型的,并且class还可以表示模板类型,但是struct不行。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
三,C语言共用体和与结构体的区别
联合体定义:有时需要使几种不同类型的变量存放在同一段内存单元中。虽然在同一段内存中不同数据类型所占字节数不同,但都从同一地址开始存放,也就是使用了覆盖技术,几个变量互相覆盖。这种使几个不同的变量共占一段内存的结构,称为共同体类型的结构(也称为联合类型)。
区别:
结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。
共用体变量所占的内存长度等于最长的成员的长度。
四,对共用体变量的访问方式
不能直接引用共用体变量,只能引用共用体变量中的成员。
a.i; a.ch a.f
不能引用共用体变量:cout<<a;
五,共用体数据类型的特点
1、 使用共用体变量的目的是希望在同一个内存段存放几种不同类型的数据。注意:在每一瞬时只能存放其中一种,而不是同时存放多种。换句话说,每一瞬时只有一个成员起作用,其他成员不起作用。
2、 能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。因此在引用共用体变量时应注意当前在共用体变量中起作用的是哪个成员。
3、 共同体变量的地址和它的各成员的地址相同,为同一个地址。
4、 不能对共用体变量名赋值;不能引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。