estructuras
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
estructuras [2015/04/02 13:00] – [Estructuras recursivas] lmateu | estructuras [2015/09/30 20:03] (actual) – [Estructuras recursivas] lmateu | ||
---|---|---|---|
Línea 88: | Línea 88: | ||
(*u).x ≡ u->x | (*u).x ≡ u->x | ||
| | ||
- | Y por lo tanto podemos reescribir la función | + | Y por lo tanto podemos reescribir la función |
< | < | ||
Línea 152: | Línea 152: | ||
==== Typedef ==== | ==== Typedef ==== | ||
- | Escribir siempre struct punto en cada declaración resulta pesado sintácticamente. | + | Escribir siempre |
< | < | ||
Línea 158: | Línea 158: | ||
</ | </ | ||
- | Esto intruduce 2 nuevos tipos: ENTERO y PUNTERO. | + | Esto intruduce 2 nuevos tipos: |
< | < | ||
Línea 171: | Línea 171: | ||
</ | </ | ||
- | Es como haber eliminado el typedef y substituido ENTERO por x y PUNTERO por p. | + | Es como haber eliminado el //typedef// y substituido |
¿A qué sería equivamente escribir lo siguiente? | ¿A qué sería equivamente escribir lo siguiente? | ||
Línea 179: | Línea 179: | ||
</ | </ | ||
- | De la misma forma se pueden declarar el tipo Punto: | + | De la misma forma se pueden declarar el tipo //Punto//: |
< | < | ||
Línea 196: | Línea 196: | ||
</ | </ | ||
- | Observe que la etiqueta que viene después de struct es opcional. | + | Observe que la etiqueta que viene después de //struct// es opcional. |
- | También se pudo haber colocado explícitamente la etiqueta punto: | + | También se pudo haber colocado explícitamente la etiqueta |
< | < | ||
Línea 205: | Línea 205: | ||
</ | </ | ||
- | //La etiqueta se puede omitir cuando no se va a usar a continuación en el archivo.// | + | //La etiqueta |
==== Estructuras recursivas ==== | ==== Estructuras recursivas ==== | ||
Línea 262: | Línea 262: | ||
< | < | ||
void insertar(Node **ppnode, int y) { | void insertar(Node **ppnode, int y) { | ||
- | Node *ins; | + | Node *pnode= *ppnode; |
- | while (*ppnode!=NULL && | + | while (pnode != NULL && |
- | ppnode= &(*ppnode)-> | + | ppnode= & pnode->next; |
- | + | pnode= *ppnode; | |
- | ins= (Node*)malloc(sizeof(Node)); | + | |
+ | | ||
+ | | ||
ins->x= y; | ins->x= y; | ||
- | ins-> | + | ins-> |
*ppnode= ins; | *ppnode= ins; | ||
} | } | ||
Línea 440: | Línea 442: | ||
</ | </ | ||
- | ¿Cómo se puede garantizar que n esté alineado? | + | ¿Cómo se puede garantizar que //n// esté alineado? |
estructura sin saber su tipo. Conoce el tamaño la región pedida, pero no sabe si es para un arreglo de 8 caracteres, | estructura sin saber su tipo. Conoce el tamaño la región pedida, pero no sabe si es para un arreglo de 8 caracteres, | ||
- | para el cual no hay requerimiento de alineamiento, | + | para el cual no hay requerimiento de alineamiento, |
- | se pone en el peor caso: 8. Malloc siempre retorna direcciones múltiplo de 8. | + | se pone en el peor caso: 8. |
- | Pero aún así si el compilador asigna un desplazamiento 0 para c y un desplazamiento 1 para n, la variable n | + | Pero aún así si el compilador asigna un desplazamiento 0 para //c// y un desplazamiento 1 para //n//, |
- | estaría desalineada. | + | la variable |
- | ocupar los bytes 1, 2 y 3 de la estructura. | + | La solución está en que el compilador asigna un desplazamiento 4 para //n// y deja sin |
+ | ocupar los bytes 1, 2 y 3 de la estructura. | ||
El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución. | El compilador sacrifica un poco de memoria para ganar eficiencia en tiempo de ejecución. | ||
una variable no está alineada, el procesador requiere más ciclos del reloj para leerla o modificarla. | una variable no está alineada, el procesador requiere más ciclos del reloj para leerla o modificarla. | ||
Línea 453: | Línea 456: | ||
//bus error// y el programa no continúa. | //bus error// y el programa no continúa. | ||
- | Para responder cual es el tamaño de '' | + | Para responder cual es el tamaño de //sizeof struct T// consideremos este código: |
< | < |
estructuras.1427979658.txt.gz · Última modificación: 2015/04/02 13:00 por lmateu