Tipo personalizado (dos): enumeración y unión (unión)


Uno, constante de enumeración

Como su nombre lo indica, la constante de enumeración enumera los valores posibles uno por uno, y estos valores posibles tienen propiedades constantes.

Por ejemplo: de
lunes a domingo de una semana se limita a 7 días, que se pueden enumerar en secuencia.
Hay géneros masculinos y femeninos, y también se pueden enumerar a su vez.
Hay 12 meses en el mes, que también se pueden enumerar en secuencia.

Para registrar estos valores posibles, las matrices son ciertamente factibles, pero el lenguaje C proporciona una forma más conveniente: enumeración.

1. La definición de constantes de enumeración

El código es el siguiente (ejemplo):

enum Weekday//星期
{
    
    
	Mon,//常量间用逗号分开
	Tue,
	Wed,
	Thu,
	Fri,
	Sat,
	Sun//注意最后一个常量后没有逗号
};

enum Sex
{
    
    
	Male,
	Female
}

Las constantes en estas constantes de enumeración tienen valores correspondientes. De forma predeterminada, la primera constante comienza desde 0 y aumenta a su vez en 1. Por supuesto, también puede asignar valores iniciales cuando la defina.

El código es el siguiente (ejemplo):

enum Weekday1
{
    
    
	//不赋初始值,默认从0开始递增1
	Mon,//0
	Tue,//1
	Wed,//2
	Thu,//3
	Fri,//4
	Sat,//5
	Sun//6
};

enum Weekday2
{
    
    
	//给某个常量赋初始值,则从该常量开始递增1
	//该常量之前的不受影响
	Mon,//0
	Tue,//1
	Wed = 10,//10
	Thu,//11
	Fri,//12
	Sat,//13
	Sun//14
};

2. Las ventajas de las constantes de enumeración

Podemos usar #define para definir constantes ¿Por qué tenemos que usar enumeraciones?
Las ventajas de la enumeración:
(1) Aumenta la legibilidad y la capacidad de mantenimiento del código
(2) En comparación con el identificador definido por #define, la enumeración tiene verificación de tipo, que es más rigurosa
(3) Evita la contaminación de nombres (encapsula constantes)
(4) Fácil de depurar
(5) Fácil de usar, se pueden definir múltiples constantes a la vez

2. Consorcio (unión)

1. Definición de tipo de consorcio

La unión también es un tipo personalizado especial. Las variables definidas por este tipo también contienen una serie de miembros. La característica es que estos miembros comparten el mismo espacio (por lo que la unión también se llama unión).

El código es el siguiente (ejemplo):

//联合类型的声明
union Un 
{
    
     
	char c; 
	int i; 
	double d;
}; 
//联合变量的定义
union Un un;

1. Variables en el consorcio

Dado que las variables de la unión comparten el mismo espacio, cambiar un valor afectará a los otros valores.

El código es el siguiente (ejemplo):

union Un
{
    
    
	int a;
	int b;
	int c;
};

int main()
{
    
    
	union Un un;
	
	//下面的三个地址均相同
	printf("%d\n", &(un.a));
	printf("%d\n", &(un.b));
	printf("%d\n", &(un.c));
	
	un.a = 1;
	printf("%d\n", un.b);//1
	printf("%d\n", un.c);//1

	un.b = 2;
	printf("%d\n", un.a);//2
	printf("%d\n", un.c);//2
	
	return 0;
}

2. Cálculo del tamaño de la unión

El tamaño de la unión es al menos el tamaño del miembro más grande.
Cuando el tamaño máximo del miembro no es un múltiplo integral de la alineación máxima, debe alinearse a un múltiplo integral de la alineación máxima.

El código es el siguiente (ejemplo):

union Un1 
{
    
     
	char c[5]; 
	int i; 
}; 
union Un2 
{
    
     
	short s[7]; 
	int i; 
}; 
printf("%d\n", sizeof(union Un1)); //8
//c数组占5个字节,对齐数为1;i变量占4个字节,对齐数为4
//联合体大小至少为5个字节,对齐到最大对齐数的整数倍,即为8
printf("%d\n", sizeof(union Un2));//16
//s数组占14个字节,对齐数为2;i变量占4个字节,对齐数为4
//联合体大小至少为14个字节,对齐到最大对齐数的整数倍,即为16

Gracias por leer, critique y corrija cualquier error.

Supongo que te gusta

Origin blog.csdn.net/weixin_51983604/article/details/115359437
Recomendado
Clasificación