ジョイント
ユニオンは特別なカスタムタイプであり、このタイプで定義される変数には一連のメンバーも含まれます。これらのメンバーが同じスペースを共有するという特徴があるため、ユニオンとも呼ばれます。
ジョイントサイズの計算
-
ユニオンのサイズは、最大のメンバーを保存できるように、少なくとも最大のメンバーのサイズです。
-
最大メンバーサイズが最大アライメントの整数倍でない場合は、最大アライメントの整数倍にアライメントする必要があります。
#include <stdio.h> //联合的声明 union Un { short s[7]; int n; }; int main() { //联合的定义 union Un un; //计算联合的大小 printf("%d\n", sizeof(union Un));//16 printf("%d\n", sizeof(un));//16 return 0; }
私のコンピューターには32個のデータバスがあるため、コンピューターの最大アライメント数は4です。ユニオンで最大のメンバーshort s [7]を見つけます。これには、14バイトが必要です。次に、最大アライメント数4まで埋めます。整数倍数の場合、結果は16になります。
コンピュータの大端と小端の共同判断を使用する
//大端返回1,小端返回0,要求借用联合体的特性
union Data
{
int i;
char ch;
};
int isBigSystem()
{
union Data d;
//d.i = 0x00000001;
d.i = 1;
if (d.ch == 1)
{
return 0;
}
else
{
return 1;
}
}
//小端机低位放低位,高位放高位,小端机
//大端机低位放高位,高位放低位,大端机
int main()
{
printf("%d\n", isBigSystem());
return 0;
}