枚举
枚举类型的定义
enum Day
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
enum Color
{
RED = 3,
GREEN,
BLUE,
YELLOW = 7,
BLACK
};
int main()
{
enum Color color1 = RED;
enum Color color2 =BLACK;
int color3=BLUE;
printf("%d %d %d %d %d %d\n", RED, GREEN, BLUE, YELLOW, BLACK,sizeof(enum Color));
printf("color1=%d\ncolor2=%d\ncolor3=%d\n", color1, color2,color3);
return 0;
}
输出:
3 4 5 7 8
color1=3
color2=8
color3=5
注意:枚举大小为4个字节 我们也可以用#define定义常量(符号常量)
#define RED 1
#define YRLLOW 7
#define BLUE 3
但是我们使用枚举可以增加代码的可读性,并且一次可以定义多个常量
联合(共用体)
union Un
{
int a;
char b;
};
联合的成员是共用同一块内存空间的,所以联合也叫共用体,这样一个联合变量的大小至少是最大成员的大小,因为联合至少得有能力保存最大的那个成员 联合的计算: 1.联合的大小至少是最大成员的大小 2.当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
char a;
int b;
double c;
};
int main()
{
printf("%d\n", sizeof(union Un));
return 0;
}
所以a的地址和b的地址和c的地址时一样的,先下面代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
char a;
int b;
double c;
};
int main()
{
union Un s = { 0 };
printf("%p\n%p\n%p\n",&s.a,&s.b,&s.c);
return 0;
}
输出:
003FF998
003FF998
003FF998
既然学了联合体,就用它来判断一下当前计算机的大小端存储吧 那什么是大端小端呢? 大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位则保存在内存的低地址中. 小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位则保存在内存的高地址中 有一个2字节的short型a,在内存中的地址为0x0010,a的值为0x3344,那么0x33为高字节,0x44为低字节,对于大端模式:就将0x33放在低地址中,即0x0010中;0x44放在高地址中,即0x0011中.对于小端模式刚好相反. 这是不使用联合体的情况:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 1;
char* p = (char*)&a;
if (*p == 1)
{
printf("当前计算机是小端模式\n");
}
else
{
printf("当前计算机是大端模式\n");
}
return 0;
}
|