Notas del lenguaje C (5) ----struct, enum, typedef, etc.
La columna de lista de miembros consta de varios miembros, cada miembro es una parte integral de la estructura.
También se debe realizar una declaración de tipo para cada miembro.
Su forma es:
Escriba el nombre del miembro declarante
Por ejemplo:
Tenga en cuenta que el punto y coma fuera de los corchetes finales es Indispensable; .
La declaración de variables solo se puede realizar después de definir la estructura.
Todas las variables declaradas como estructura stu están compuestas por los cuatro miembros anteriores.
Se puede observar que una estructura es un tipo de datos complejo, que es una colección de variables ordenadas con un número fijo y de diferentes tipos.
Existen tres formas de declarar variables de estructura.
Tome las cosas definidas anteriormente como ejemplo:
Por ejemplo:
También puede usar una definición de macro para hacer que una constante simbólica represente un tipo de estructura. Por ejemplo:
Por ejemplo:
La forma general de esta forma de declaración es:
Por ejemplo:
La forma general de esta forma de declaración es:
La diferencia entre el tercer método y el segundo método es que el nombre de la estructura se omite en el tercer método y la variable de estructura se proporciona directamente.
Cuando se utilizan variables de estructura en programas, muchas veces no se utilizan en su conjunto.
En ANSI C, además de permitir que variables de estructura del mismo tipo se asignen entre sí, el uso general de variables de estructura, incluidas asignación, entrada, salida, operaciones, etc., se realiza mediante los miembros de la variable de estructura.
La forma general de representar los miembros de las variables de estructura es:
Nombre de la variable de estructura.Nombre del miembro
Por ejemplo: niño1.num niño2.sexo
Si el miembro en sí es una estructura, el miembro más bajo debe encontrarse jerárquicamente antes de poder usarse. Por ejemplo: niño1.cumpleaños.mes
La asignación de variables de estructura es asignar valores a cada miembro.
Los elementos de un array también pueden ser de tipo estructura.
Por lo tanto, se puede formar una matriz estructurada.
Asignación de inicialización:
Por supuesto, pstu también se puede declarar al definir la estructura stu.
La asignación consiste en asignar la primera dirección de la variable de estructura a la variable de puntero, y el nombre de la estructura no se puede asignar a la variable de puntero.
Si boy es una variable de estructura declarada como tipo stu.
Entonces:
Con la variable de puntero de estructura, es más fácil acceder a cada miembro de la variable de estructura.
La forma general de acceso es:
(*variable de puntero de estructura).Nombre del miembro
o
variable de puntero de estructura-gt ;Nombre del miembro
Por ejemplo: (*pstu).num o pstu-gt;num
Por ejemplo:
Al introducir matrices, introdujimos el La longitud está predefinida y fija en todo el programa.
Los tipos de matrices dinámicas no están permitidos en lenguaje C.
Por ejemplo:
Pero existe tal demanda. Para resolver este problema, el lenguaje C proporciona algunas funciones de administración de memoria. Estas funciones de administración de memoria pueden asignar dinámicamente espacio de memoria. necesario, y también el espacio que ya no está en uso se puede recuperar para su uso, proporcionando un medio para utilizar eficazmente los recursos de memoria.
Hay tres funciones de administración de memoria de uso común:
Ejemplo: asignar un área e ingresar los datos de un estudiante
El ejemplo anterior utiliza una asignación dinámica. espacio de memoria.
Cada vez que se asigna un espacio para almacenar los datos de un estudiante, podemos llamarlo nodo.
Cuántos bloques de espacio de memoria se deben asignar para el número de estudiantes, es decir, cuántos nodos se deben establecer.
Por supuesto, el trabajo anterior también se puede completar utilizando una matriz estructural, pero si no se puede determinar con precisión el número de estudiantes de antemano, no se puede determinar el tamaño de la matriz.
Además, cuando un alumno repite curso o abandona el colegio, el espacio que ocupa el elemento no se puede liberar del array.
Estos problemas se pueden solucionar bien con el almacenamiento dinámico.
Se asigna un nodo para cada estudiante. No es necesario determinar el número exacto de estudiantes de antemano. Si un estudiante abandona la escuela, el nodo se puede eliminar y el espacio de almacenamiento puede ocuparse. se puede liberar, ahorrando así valiosos recursos de memoria.
Por otro lado, el método array debe ocupar un área de memoria continua.
Cuando se utiliza la asignación dinámica, cada nodo puede ser discontinuo (el intranodo es continuo).
La relación entre nodos se puede implementar mediante punteros.
Es decir, un elemento miembro se define en la estructura del nodo para almacenar la primera dirección del siguiente nodo. Este miembro utilizado para almacenar la dirección a menudo se denomina campo de puntero.
La primera dirección del segundo nodo se puede almacenar en el campo de puntero del primer nodo, y la primera dirección del tercer nodo se puede almacenar en el campo de puntero del segundo nodo, y así sucesivamente hasta el final.
Dado que el último nodo no tiene conexión de nodo posterior, a su campo de puntero se le puede asignar un valor de 0
Este método de conexión se denomina "lista vinculada" en la estructura de datos.
Las operaciones básicas de las listas vinculadas incluyen principalmente lo siguiente:
Ejemplo: crear una lista vinculada de tres nodos para almacenar datos de los estudiantes. Para simplificar, asumimos que solo hay dos elementos en la estructura de datos de los estudiantes: número de estudiante y edad. Puede escribir una función crear que cree una lista vinculada. El programa es el siguiente:
La función de creación se utiliza para crear una lista vinculada con n nodos. Es una función de puntero y el puntero que devuelve apunta a la estructura stu.
En la función de creación se definen tres variables de puntero de la estructura stu.
head es el puntero principal y pf es la variable de puntero que apunta al nodo anterior de dos nodos adyacentes.
pb es la variable puntero del siguiente nodo.
Una enumeración es un tipo de datos básico, no un tipo construido, porque no se puede descomponer en ningún tipo básico.
nombre de enumeración de enumeración { tabla de valores de enumeración}
Por ejemplo: día de la semana de enumeración {dom, lunes, martes, miércoles, jueves, viernes, sábado }; > enum día laborable a, b, c;
O:
enum día laborable { sol, lunes, martes, miércoles, jueves, viernes, sábado }a, b, c
p>
O:
enum { sol, lunes, martes, miércoles, jueves, viernes, sábado }a, b, c
Ejemplo:
<; p> p>Nota:
Solo se pueden asignar valores de enumeración a las variables de enumeración, y el valor de un elemento no se puede asignar directamente a las variables de enumeración. Por ejemplo:
a=sun; b=mon; es correcto
a=0;
Si debe asignar un valor a una variable de enumeración, debe utilizar la conversión de tipo de conversión.
Por ejemplo: a=(enum Weekday)2;
También debe tenerse en cuenta que los elementos de enumeración no son constantes de caracteres ni constantes de cadena, por lo que no agregue comillas simples ni dobles. al usarlos.
Ejemplo:
La forma general de la definición de typedef es:
typedef nombre del tipo original nombre del nuevo tipo
El nombre del tipo original contiene En la parte de definición, los nombres de los nuevos tipos generalmente se expresan en letras mayúsculas para facilitar la distinción.
A veces, la definición de macro se puede usar para reemplazar la función typedef, pero la definición de macro se completa mediante preprocesamiento, mientras que typedef se completa en tiempo de compilación, y este último es más flexible y conveniente.
Usar typedef para definir tipos como matrices, punteros, estructuras, etc. brindará una gran comodidad. No solo simplifica la escritura sino que también aclara el significado, mejorando así la legibilidad.
Por ejemplo:
Otro ejemplo: