㈠ c语言共用体程序计算
这个key赋值,高八位为65,低八位为66,key.ch[0]为低八位,key.ch[1]为高八位,因为是char型,所以一个元素一个字节,int型在一些编译器中占4个字节,一些编译器中占2个字节,但空间至少都和char ch[2]一样大,若你先给字符数组赋值,那么把输入的key.[1]即高八位乘以256再加上输入的key.ch[0]即低八位,组合起来即为i的数值,但要看你以什么的形式输出,以%d的形式输出可以看到数值,以%c的形式输出就会出错,因为超出界了
㈡ C语言结构体与共用体和位运算的几个问题
1.这个答案是不固定的,要看用的平台,在TC下面应该是2,在VC下面是4;那个b是一个指针,其实他相当于一个int类型,那个sizeof方法得出的结果是占几个字节. 2.这是一个对ASCII表的计算,要看出'1'的表值为49,'5'的表值为53,49+53=102,正好对应的是f 3.求链表的长度,你这个程序不全,但主体是对的.(链表是数据结构中的概念,你要是学习应该会很好理解) 4.我编译的结果是16,应该是2+4+2+4+4=16才对,跟第1题差不多,表示的是这个结构占的字节数 5.要弄清楚运算符的优先顺序,那个式子相当于(4+11)再左移2位,相当于15/4=3,由于都是取整,不能四舍五入
㈢ c语言中的共用体是什么
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:
union 共用体名
{成员表列};
union data
{
int a ;
float b;
doublec;
chard;
}obj;
该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
struct stud /*结构体* /
{
int a;
float b;
double c;
char d;
};
main( )
{
struct stud student;
printf("%d,%d",sizeof(struct stud),sizeof(union data));
}
运行程序输出:
15,8
程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。
对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。
可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。
main( )
{
union data
{
int a;
float b;
double c;
char d;
}mm;
mm.a=6;
printf("%d\n",mm.a);
mm.c=67.2;
printf("%5.1lf\n", mm.c);
mm.d='W';
mm.b=34.2;
printf("%5.1f,%c\n",mm.b,mm.d);
}
运行程序输出为:
6
6 7.2
3 4.2,=
程序最后一行的输出是我们无法预料的。其原因是连续做mm.d='W';mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。
例子虽然很简单,但却说明了共用体变量的正确用法。
㈣ C语言有关共用体的使用方法,请前辈们请教谢谢啦!
共用体又称联合体,关键字union,正如其名字,其成员变量共同占用同一段内存,这段内存的大小就是所有成员中最大的那个,所以整个共用体变量大小就是其最大成员大小,比如你代码中的A大小就是成员c的大小8个字节。
至于用处还是有很多的:
比如我们表示一个学生分数,有幼儿,小学,初中,这三种学生信息结构基本相同,但只有分数标准不一样,幼儿分数(差、中、优),小学(C、B、A),初中(0~100分)。那么我们就可以把学生信息定义成结构体,而结构成员分数那一块定义成共用体(包含字符串类型,字符类型、数值类型)。这样结构本身就不需要定义三种类型成员了。
又比如,数据传递时,用共用体表示数据,之后只要按照你的需求按不同格式获取数据。
㈤ 关于c语言的共用体
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。
共用体类型数据的特点
1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3.共用体变量的地址和它的各成员的地址都是同一地址。
4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
㈥ c语言共用体有关的求解
进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。 共用体类型数据的特点 1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。 2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。 3.共用体变量的地址和它的各成员的地址都是同一地址。 4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。 5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
㈦ c语言中的共用体
我测试了一下
int为32bit
,long为32位
,char为8位机测试。
分析得出这样的结果:
这正如共用结构体中
假如他们的共用首地址为0x10000000
那么
地址
变量
0x10000000:
a[0]
如果执行语句
s.a[0]=0x39
0x10000004:
a[1]
相差4个字节
那么会产生如下变化:
0x10000000:
b
a[0]=0x39
b[0]=0x39
c[0]=0x39(
字符c[0]="9")
0x10000000:
c[0]
如果再执行语句
s.a[1]=0x38
0x10000001:
c[1]
那么会产生如下变化:
0x10000002:
c[2]
a[1]=0x38
0x10000003:
c[3]
相差1个字节
也即是地址0x10000000到0x10000003中的数据为0x00000039
也即是地址0x10000004到0x10000007中的数据为0x00000038
虽然是共用体,但是a
b
c同用了一个地址
如果对a赋值了也同时对b和c赋值
只是数据类型不同而已。
如果从地址上来分析
c如果定义的是c[8],那么c[5]地址即为0x10000004
它的值就因该为0x38,因为和a[1]的地址相同。
查看b的是后可以直接用%d来查看
因为在本机上也是32bit和int相同
㈧ 在c语言中,共用体一般有什么作用
共用体一般指联合体,作用如下:
1、节省内存
有两个很长的数据结构,不会同时使用,用结构体的话,只占用最长的那个数据结构所占用的空间,就足够了。
2、做某些转换用
union{char a[8];double x;};
x=20.8;
cout<<hex<<a[0]<<“ ”<<a[1]<<…<<endl;
(8)c语言共用体类型能不能进行运算扩展阅读:
结构体和共用体
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。
共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共用体也是一种自定义类型,可以通过它来创建变量,
㈨ C语言公共用体问题
共用体的成员变量都是有效的,你可以直接引用它们
但是注意,因为它们是共用一个地址,所以你直接引用,会得到你不想要的结果
union{
char c;
int a;}
例如上面,你先赋值了c,后赋值了a,但是a的值会把c的值覆盖,所以使用的时候要注意
㈩ C语言 共用体 解释下
B
共用体所占内存大小就是其中占内存最大的变量所占内存的大小,这里
long x[2]占8*2=16
int y[4]占4*4=16
char z[8]占1*8=8
所以sizeof(them)=16
1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3.共用体变量的地址和它的各成员的地址都是同一地址。