本文目录一览

1,c语言union用法

寄存器八位! stat直接赋值 stat_bitN直接修改第N位的值 比如stat=2,寄存器就是0000 0010 然后,stat_bit7=1,寄存器1000 0010,至于左起是第一位,还是右起是第一位,根据不同的CPU不同!

c语言union用法

2,C语言结构体union

首先说明你这不是结构体,而是共用体(联合体),它的值和类型取决于最后赋给的数据,它的长度取最长的成员的长度。根据不同的系统,这段程序会有不同的结果。对于Turbo C,int分配2个字节,long分配4个字节,所以这里最长成员是 long x[2]和int y[4],都为8个字节,所以输出8;如果是DEV-CPP、VC,int也分配到4个字节,则最长的成员是int y[4],为16个字节 ,所以输出16
struct student { int number; char name[20]; scanf("%d",&student_number[i].number); scanf("%s",student_number[i].name);
Turbo C 下是8,其他是16,或是32Turbo C 是写16 为系统的所以是8,在32为系统下是16,64为系统下位32

C语言结构体union

3,c语言 union 意思

最后那个浮点数输出与输入不一样是因为计算机内部是以二进制来保存数据的,有一些十进制小数无法精确地转换成二进制,再加上float型的精度不够导致的。 #include union un_type { char charvar; int intvar; float floatvar; }; int main() { union un_type myunion; printf("请输入一个字符\n"); scanf("%c", &myunion.charvar); printf("联合myunion中当前存的是字符%c\n", myunion.charvar); printf("请输入一个整数\n"); scanf("%d", &myunion.intvar); printf("联合myunion中当前存的是整数%d\n", myunion.intvar); printf("请输入一个浮点数\n"); scanf("%f", &myunion.floatvar); printf("联合myunion中当前存的是浮点数%f\n", myunion.floatvar); return 0; }
一个很简单的理解。结构体每一个数据成员都分配一个内存空间;而联合体分配所有数据成员最长的那个数据的内存空间。over!

c语言 union 意思

4,c语言union用法

首先,extern union定义了一个联合。联合里面包含了一个8位整数STAT以及一个结构体。联合每次只能使用其中的一种类型,也就是说联合要么使用整数STAT,要么使用结构体,不能同时使用。使用整数,很简单,不用多言。其中的结构体,是一个位字段,里面包含8个bit,可以方便地为每个bit赋值。
union在c中本质上是一个结构体,用法和struct相似,用union 名称 //... 成员};来声明类型使用时,要在名称前加上关键字unionunion 类型名称 变量名称;在调用时用后缀表达式expression.identifier的形式来调用成员:a.member1 = 10; // a为unionp->member1 = 20; // p为union的指针但有一些不同点:1. union,顾名思义,就是多个成员共用一块内存。在编译时会选取成员中长度最长的来声明。也就是说在如下与程序片段中:union a int a1; // sizeof(int) = 4 float a2; // sizeof(float) = 8 double a3; // sizeof(double) = 16};也就是说,上述union声明在内存中等同于struct a double a3;}; 2. 根据第一条的特点,在对union成员进行赋值后,要注意使用时一定要调用赋值过的成员。

5,C语言例子解释关于union

可能的值是266(小尾) 或 17432576 (32 位大尾序) 或 2561(16位大尾) 参考下面的代码123456789101112131415161718192021222324 #include<stdio.h>union inti; charx[2]; }a; intmain(void) inti = 0; a.x[0] = 10; a.x[1] = 1; printf("%d\n",a.i); printf("联合a共占 %d 个字节\n",sizeof(a)); p = (char*)(&a); for(i = 0; i < sizeof(a); ++i) printf("0x%08X --------", p + i); printf("%02X\n", *(p+i)); } return0; }
union是联合的意思,也就是内部的变量是共用同一个存储空间的,以变量中存储空间最大的为整个union的占用空间。这个union中i是int型的占用4个字节,char x[2]是两个字节,那么这个union就占用4个字节。假设分别是byte3,byte2,byte1,byte0。如果用a.x[0]操作的就是byte0(对应16进制数是0xa),用a.x[1]操作的就是byte1(对应16进制数是0x1),byte3,byte2都没有被赋值(在调试已经初始化为0)。读取a.i 时,就是对byte3,byte2,byte1,byte0同时操作,组合成16进制数就是0x0000010a,也就是266.
union是共同体,取值是取最后一次得到值的。必将作为所有的值。(也就是所有变量的值都是一样的) 因为union中有数组。赋值取首地址。 s->i[0] =0x39; s->i[1] =0x38; 都表示16进制,但是数组就取首地址。即所有值变量的值都是0x39(16进制) printf("%lx\n",s->k); 故输出为39 printf("%c\n",s->c[0]); 输出为9(10进制为57,字母表示9) 希望能帮助你!
计算机对于int采用高位在后的存储方式,也就是int 的4个字节,第一个字节是最低位,第四个字节是最高位。union的x 成员只是用了其中2个字节,就是第一个和第二个。当第一个付10,第二个付1的时候,对于int成员来说就是 1 * 256 + 10 (因为一个字节最大为FF即255,进位后为256),结果就是266.这边需要注意的是你应该是在debug 模式下执行的,这时候为给a付初始值0,如果在release模式下,a不一定有初始值0,这时候因为第三位和第四位未知,所以输出也会未知。

6,c语言中的union是什么意思啊

1. c语言中的union 是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值2. 联合的定义定义一个联合类型的一般形式为: union 联合名 成员表 };成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。例如: union perdata int class; char office;};定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。3. 联合变量的说明联合变量的说明和结构变量的说明方式相同, 也有三种形式。即先定义,再说明;定义同时说明和直接说明。以perdata类型为例,说明如下: union perdata int class; char officae;};union perdata a,b;或者可同时说明为: union perdataint class;char office; }a,b;或直接说明为: unionint class;char office; }a,b 经说明后的a,b变量均为perdata类型。 a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。4. 联合变量的赋值和使用对联合变量的赋值,使用都只能是对变量的成员进行。 联合变量的成员表示为: 联合变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class a.office 不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行5. 联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后, 才能把变量说明为该联合类型。
http://baike.baidu.com/view/109447.html?wtp=tt#1
声明一个struct类型,为date,有一个实例变量today,如果int的大小占4个字节,第一句输出12union表示可以有多种方法来看待这个数据类型,里面的的数据是共享内存空间的,大小应该是union中最大的类型,第二句输出8
error:operator needs class/struct/union操作需要类,结构体,联合体。。针对n.next 或n->next其中n不是以上三者的情况

文章TAG:c语言  语言  union  用法  c语言union  
下一篇