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: por lmateu
