首页 > 编程知识 正文

c语言共用体类型变量在程序运行期间,c语言中,共用体类型变量在程序执行期间

时间:2023-05-04 23:35:21 阅读:272474 作者:4593

运行以下代码,看一看输出的结果是什么?

#include <stdio.h>int main(){union key{int k;char ch[2];}u;u.k = 258;printf("%d %dn",u.ch[0],u.ch[1]);return 0;}

运行结果:

从运行的结果中可以看出,ch[0]的值为2,ch[1]的值为1。为什么呢?
共用体的特点为:共用体可以将不同数据类型的值放在同一个内存空间中,现实在一个存储区根据程序执行的不同需求读写不同类型的数据。所有成员共用一块内存空间,其首地址相同。共用体变量与其各成员变量的内存地址相同。共用体变量所占内存大小为成员当中占内存最大的那个变量的大小。

给u.k赋值为258,ch[0]的值为2,ch[1]的值为1。为了找出其规律,可以多试几个数:

#include <stdio.h>int main(){ union key{ int k; char ch[2]; }u; printf("%dn",sizeof(u)); //输出u所占的字节数 int i = 0; while(1){ scanf("%d",&u.k); printf("%d %dn",u.ch[0],u.ch[1]); i++; if(i==100){ break; } } return 0;}

运行:

u所占的字节数为4,也就是成员中占字节数最大的int的字节数。4个字节32位。根据以上输入输出结果,列出对应数字的二进制:

第一个输入为0,int类型,二进制为:0000 0000 0000 0000 0000 0000 0000 0000
char类型占1个字节,其对应该二进制数的后八位,所以char的值为0。而char[1]对应该二进制数的倒数第二个后八位,所以ch[1]的值也为0.

第二个输入为1,二进制数为:0000 0000 0000 0000 0000 0000 0000 0001,根据前面的对应结果,ch[0]的值为1,ch[1]的值为0.

直到输入127,对应的二进制数为:0000 0000 0000 0000 0000 0000 0111 1111,ch[0]的值为127,ch[1]的值为0

输入128,对应的二进制数为:0000 0000 0000 0000 0000 0000 1000 0000,ch[0]的值为-128,因为char的存储数值范围在-128~127,1000 0000最高为符号位为1,所以这个数为负数,减1得到反码为0111 1111,再取反得到数值1000 0000,所以为-128。而ch[1]的值为0.

输入129,对应的二进制数为:0000 0000 0000 0000 0000 0000 1000 0001,ch[0]的值为-127,其二进制为1000 0001,最高位为1,所以为负数。减1得到反码为1000 0000,取反得到数值为0111 1111,所以ch[0]的值为-127。ch[1]的值依旧为0.

输入255,对应的二进制数为:0000 0000 0000 0000 0000 0000 1111 1111,ch[0]的值为-1,其二进制为1111 1111,最高位为1,所以为负数。减1得到反码为1111 1110,取反得到数值为0000 0001,所以ch[0]的值为-1。ch[1]的值此时依旧为0.

输入256,对应的二进制数为:0000 0000 0000 0000 0000 0001 0000 0000,此时后八位的数值为0,所以ch[0]的值为0. 倒数第二个后八位为0000 0001,也就是ch[1]的数值,为1.

输入257,对应的二进制数为:0000 0000 0000 0000 0000 0001 0000 0001,后八位0000 0001为ch[0]的数值,为1. 倒数第二个后八位ch[1]的值也为1.

… …

由此就可以得到共用体变量的数值规律。

修改代码,如下:

#include <stdio.h>int main(){ union key{ int k; char ch[4]; }u; printf("%dn",sizeof(u)); int i = 0; while(1){ scanf("%d",&u.k); printf("%d %d %d %dn",u.ch[0],u.ch[1],u.ch[2],u.ch[3]); i++; if(i==100){ break; } } return 0;}

如果输入34752536,对应的二进制数为:0000 0010 0001 0010 0100 1000 0001 1000,那么就可以得到ch[0]的值为24,ch[1]的值为72,ch[2]的值为18,ch[3]的值为2。那么运行一下检验结果:

由结果可以看出,确实如此。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。