#include <stddef.h>
#include<stdio.h>
int check_sys()
{
union //un
{
char c;
int i;
}u;
u.i = 1;
return u.c;
/*int a = 1;
return *(char*)&a;*/
}
int main()
{
int ret = check_sys();
/*int a = 1;
if (*(char*)&a == 1)*/
if (ret==1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
}
//联合—联合体—共用体 //里面只能用一个
union un
{
char c;
int i;
};//占用的字节按最大的字节算,例如这个站4个字节
int main()
{
union un u;
printf("%d\n", sizeof(u));
/*printf("%p\n", &u);
printf("%p\n", &(u.c));
printf("%p\n", &(u.i));*/
// 证明三个占用的地址一样
}
//枚举
enum sex
{
male,//默认0
female,//1
sercet//2 但也可以赋值例如 female=9,那么sercet=10
};
enum color
{
red,
green,
blue
};
int main()
{
enum sex a = male; //a字节大小为4
//enum color a=2;//不能成功 因左边enum color,右边 int类型
printf("%d %d %d", red, green, blue);
}
struct s
{
char c;
int i;
double d;
};
void Init(struct s*ps)
{
ps->c = 'a';
ps->i = 100;
ps->d = 3.14;
}
void print1(const struct s*pa) //const防止原结构体数值发生改变
{
printf("%c %d %lf ", pa->c,pa->i,pa->d);
}
void print2(struct s tmp)
{
printf("%c %d %lf ", tmp.c, tmp.i, tmp.d);
}
int main()
{
struct s a = { 0 };
Init(&a);
print1(&a);
print2(a);
}
//#pragma pack(4) 将默认对齐数改为4
struct s
{
char c;
int i;
double d;
};
//#pragma pack() 取消设置的默认对齐数
//offsetof函数 计算结构体中某变量相对于首地址的偏移量
int main()
{
printf("%d\n", offsetof(struct s, c));
printf("%d\n", offsetof(struct s, i));
printf("%d\n", offsetof(struct s, d));
}