共用体
#include<stdio.h>void partition(unsigned long int num)
{
union a
{
unsigned int part;
unsigned long int w;
}n,*p;
p=&n;
n.w=num;
printf("long int=%lx\n",num);
printf("low-part num=%0x,high-part num=%0x\n",p->part,p->part);
}
int main()
{
unsigned long int x;
x=0x23456789;
partition(x);
return 0;
}
这个代码能解释一下吗 本帖最后由 jackz007 于 2022-11-24 19:55 编辑
这个教材太老,不适合今天,一个 int 占用 2 字节,那是 DOS 时代 16 位程序横行时的事情,如果在今天使用,必须改代码。
#include<stdio.h>
void partition(unsigned int num)
{
union a
{
unsigned short part ; // 共用体成员 part 是一个有 2 个 unsigned short 型元素的一维数组
unsigned int w ; // 共用体成员 w 是一个 unsigned int 型的变量
} n , * p ; // 共用体的容量由体量最大的成员决定,所以,这个共用体占用的存储空间由成员 w 决定,是 4 个字节
// 共用体 w 和 part 两个成员将会使用同一个储存空间 (4 个字节),可以视为对同一个变量的两个不同性质的引用
p = & n ; // p 指向共用体 n
n . w = num ; // 为共用体 n 的 w 成员赋值为输入参数 num
// num 的值为 0x23456789,我们使用的 PC 采用 Little Indian 编码,这 4 个字节在内存中的实际顺序为:89 67 45 23
// 也就是说,共用体 n 内存中 4 个字节的内容为 89 67 45 23,其中,part 成员由 2 个 2 个字节的成员构成,于是,
// n . part : 89 67,值为 0x6789,n . part : 45 23,值为 0x2345
printf("num = 0x%x\n" , num) ;
printf("low-part num = 0x%0x , high - part num = 0x%0x\n" , p-> part , p -> part) ;
}
int main()
{
unsigned intx ;
x = 0x23456789;
partition(x) ;
return 0 ;
}
编译运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
num = 0x23456789
low-part num = 0x6789 , high - part num = 0x2345
D:\\C>
页:
[1]