天天看點

共用體與枚舉類型

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>

//枚舉類型:
//enum Color
//{
//  //枚舉的可能取值--常量
//  red=2,//預設情況下第一個值是:0
//  green=5,
//  blue
//};
//int main()
//{
//  //green = 5;  //err:枚舉類型的取值是常量類型,除了賦初值外,不能再賦其它值
//  //enum Color s = 3; //err:int類型的值不能賦給enum Color(c語言不報錯,但c++會報錯)
//  printf("%d %d %d\n", red, green, blue);
//  return 0;
//}


//聯合--共用體類型:
//union Un
//{
//  int i;
//  char c;
//};
//int main()
//{
//  union Un u;
//  printf("%d\n", sizeof(u)); //4
//
//  u.i = 0x11223344;
//  //小端存儲:44 33 22 11
//
//  u.c = 0x55;
//  //小端存儲:55 00 00 00
//
//  //因為他們用的同一個首位址,是以:
//  printf("%x\n", u.i);//11223355
//  return 0;
//}


//計算聯合體的大小:
//1、聯合體的大小至少是最大成員的大小
//2、當最大成員不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍
union Un1
{
  int i;  
  char c[5];
};
union Un2
{
  short c[7]; //14
  int i;      //4
};
int main()
{
  union Un1 u1;
  union Un2 u2;
  int c[7];
  printf("%d\n", sizeof(c));//28
  printf("%d\n", sizeof(u1));
  printf("%d\n", sizeof(u2));
  return 0;
}


//判斷是小端模式還是大端模式:
//int check_sys()
//{
//  int a = 1;
//  return *(char*)&a;
//}
//int check_sys()
//{
//  union Un
//  {
//    int i;
//    char c;
//  }u;
//  u.i = 1;
//  //傳回1:表示小端
//  //否則:表示大端
//  return u.c;
//}
//int main()
//{
//  int ret = check_sys();
//
//  if(1==ret)
//  {
//    printf("小端\n");
//  }
//  else
//  {
//    printf("大端\n");
//  }
//  return 0;
//}      

繼續閱讀