是从union的首地址位置开始。
一般情况,我们的计算机都是小端模式
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct st_typy { int i; int a[0]; }type_a; union { int i; char a[2]; }*p,u; void main(void) { int a[5] = {1,2,3,4,5}; int *ptr=(int *)(&a+1); p=&u; p->a[0]=0x39; p->a[1]=0x38; printf("p->i=0x%X\n",p->i); printf("%d\n",sizeof(type_a)); printf("%d,%d\n",*(&a+1-1),*(ptr-1)); }
printf("p->i=0x%X\n",p->i); 打印的是0x3839说明高字节存在高地址中,那么就是小端模式
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct st_typy { int i; int a[0]; }type_a; union { int i; char a[2]; }*p,u; int checkSystem() { union check { int i; char ch; }c; c.i=1; return((c.ch==1)?1:0); } void main(void) { int a[5] = {1,2,3,4,5}; int *ptr=(int *)(&a+1); int i=1; p=&u; p->a[0]=0x39; p->a[1]=0x38; if(checkSystem) { printf("计算机是小端模式\n"); } printf("p->i=0x%X\n",p->i); printf("%d\n",sizeof(type_a)); printf("%d,%d\n",*(&a+1-1),*(ptr-1)); }