C语言编程

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。联合体占用内存是其中变量的最大值....int:2byte; float: 4byte; char: 1byte所以, struct test{ int ml; //占 2byteschar m2; //占 1byte float m3; // 占4bytes union uu{ char ul; // 占5bytesint u2; // 占4bytes } ua; // 但是联合体union uu: 5bytes.} myaa;因此, 该结构体占用的字节数: 1+2+4+5 = 12bytes.

特别之处

“联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如前面介绍的“单位”变量, 如定义为一个可装入“班级”或“教研室”的联合后,就允许赋予整型值(班级)或字符串(教研室)。要么赋予整型值,要么赋予字符串,不能把两者同时赋予它。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后, 才能把变量说明为该联合类型。

一、联合的定义

定义一个联合类型的一般形式为:

union 联合名

{

成员表

};

成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。

例如:

union perdata

{

int class;

char office;

};

定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。

二、联合变量的说明

联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下:

union perdata

{

int class;

char officae;

};

union perdata a,b;

或者可同时说明为:

union perdata

{

int class;

char office;

}a,b;

或直接说明为:

union

{

int class;

char office;

}a,b

经说明后的a,b变量均为perdata类型。 它们的内存分配示意图如图7—8所示。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于

office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。

union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应该是0,5,6

基本简介

联合体

是union 的中文解释又称为共用体

各种程序语言 都有这种数据结构

汇编, C语言, C++ 都有这种 数据类型

它就是 把 各种基本类型 捆绑在一起

它与结构体的唯一区别就是在分配类存的时候 给联合体分配的是最大的一种基础类型的空间,而结构体则是它所包含的基础类型的之和。 下面用C++ 举一个例子:

union {

int i;

long l;

double d;

};

这个联合体就包含了3个基础类型,整形,长整形,双精度型

分配空间的时候就分配是double 的空间, 他们共用这段空间。而结构体分配则是 这3种之和的空间量。

数据的变化

上面的代码可以更直观地显示数据在内存中的变化,每当改变联合数据时,其他的数据也会随着内存的变化而变化。

当然,使用联合体也有限制,那就是.NET的联合体只适用于值类型,无法应用在引用类型和指针中,你无法设置字符串(String)或是数组进入联合类型,这一点需要非常的注意!

当然,.NEt中的联合结构体并不只有上面的用法,你可以发挥自己的想象力,

慨述

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

在C++中有一种类型叫做联合体(也叫共用体),它的关键字为union,在使用上与结构struct非常相似,可以包含任何的结构类型数据,但它又有一个非常独特的特性,那就是所有的数据都指向一个地址。

位置的数值

这个意思你可以理解为:联合体中的所有数据都是引用一个内存块中相同地址的数据,当我们改变这个联合体内任何一种数据的值时,其他的数据的值都会随之改变。

这对于未知类型的数据非常有效,你可以使用联合体装载一个数据,然后分析其数据是否有效,或者可以对某些特殊的类型进行位运算,获取其特殊位置的数值。

但在VB.NET或C#中,根本没有union关键字让我们声名联合体,但该怎么做才能声名联合体呢?

这需要用到结构属性!

让我们看看如何将下面的C++联合体代码转换为一个VB.NET的联合结构吧

基本释义

所谓联合体投标,是指两个以上法人或者其他组织组成一个联合体,以一个投标人的身份共同投标的行为。在国际招标投标中,是经常被采用的投标形式.对于联合体投标可作如下理解:

1、联合体承包的联合各方为法人或者法人之外的其他组织。形式可以是两个以上法人组成的联合体、两个以上非法人组织组成的联合体、或者是法人与其他组织组成的联合体。

2、联合体是一个临时性的组织,不具有法人资格。组成联合体的目的是增强投标竞争能力,减少联合体各方因支付巨额履约保证而产生的资金负担,分散联合体各方的投标风险,弥补有关各方技术力量的相对不足,提高共同承担的项目完工的可靠性。如果属于共同注册并进行长期的经营活动的“合资公司”等法人形式的联合体,则不属于《招标投标法》所称 的联合体。

3、联合体的组成是“可以组成”,也可以不组成。是否组成联合体由联合体各方自己决定。对此《招标投标法》第三十一条第四款也有相应的规定。这说明联合体的组成属于各方自愿的共同的一致的法律行为。

4、联合体对外“以一个投标人的身份共同投标”。也就是说,联合体虽然不是一个法人组织,但是对外投标应以所有组成联合体各方的共同的名义进行,不能以其中一个主体或者两个主体(多个主体的情况下)的名义进行,即“联合体各方”“共同与招标人签订合同”。这里需要说明的是,联合体内部之间权利、义务、责任的承担等问题则需要依据联合体各方 订立的合同为依据。

5、联合体共同投标的联合体各方应具备一定的条件。比如,根据《招标投标法》的规定,联合体各方均应具备承担招标项目的相应能力;国家有关规定或者招标文件对投标人资格条件有规定的,联合体各方均应当具备规定的相应资格条件。

6、联合体共同投标一般适用于大型建设项目和结构复杂的建设项目。对此《建筑法》第 二十七条有类似的规定。

联合体投标申请资格预审必须符合以下要求:

⒈参加联合的所有成员都应分别填写完整的资格预审表格,且不允许任何单位提交或参加一个以上的投标.

⒉资格预审申请书中须指明为首的主办人,招标人与联合体之间的任何联系将通过为首的主办人进行.

⒊申请书必须确认,如果资格预审合格后联合体参加投标,投标文件及今后可能被授予的合同都将由所有合伙人签署,以便使法律对全体合伙人共同并分别具有约束力.

⒋申请书必须说明拟议中每个合伙人的参与情况及其责任.

除以上特殊条件外,其他方面与前述单独申请资格预审的要求基本一致.

相关新闻

词条信息

  • 浏览次数: 1008 次

  • 更新时间: 2015-01-08