Punteros y memoria
25 pasos en 7 series de C.
El tour del que C se trata en realidad. Primero punteros, luego punteros genéricos y a funciones, y después malloc y free y la pregunta de quién es dueño de qué.
Hay una serie llamada Propiedad y errores, y está ahí porque C no te ayuda con ninguna de las dos cosas. Los structs y las cadenas en memoria lo cierran. Veinticinco pasos, y aquí es donde C deja de ser un lenguaje común y pasa a ser aquel sobre el que todo lo demás está construido.
Punteros
- PunterosDirecciones y desreferencias: el corazón de C.
- Intercambio vía punterosIntercambiar dos valores a través de punteros, el ejercicio que explica por qué C los tiene.
- Aritmética de punterosRecorrer un arreglo con punteros en vez de índices.
- Los arreglos decaen a punterosUn argumento de arreglo es en realidad un puntero; por eso la función necesita la longitud.
- const a ambos ladosDónde se sienta el const decide si se congela el puntero o lo apuntado.
Punteros genéricos y a funciones
- Punteros voidUn puntero void guarda cualquier dirección de objeto; el cast de vuelta es tu responsabilidad.
- Punteros a funciónEl nombre de una función es una dirección: se puede guardar, pasar y llamar.
- Callbacks con contextoLa convención de C para un callback: el puntero a función más un puntero void tuyo.
- qsort con comparadorEl ordenamiento estándar recibe el tamaño del elemento y una función de comparación.
Memoria dinámica
- malloc y freeReservar memoria en el heap en tiempo de ejecución.
- calloc y la memoria en cerocalloc recibe un conteo y un tamaño, y entrega memoria ya puesta en cero.
- reallocRedimensionar una reserva del heap para hacer crecer un arreglo.
- Hacer crecer un búferDuplicar bajo demanda, y nunca asignar el resultado de realloc sobre tu único puntero.
- memcpy, memmove, memsetTres operaciones en bloque, y la única regla que separa a las dos primeras.
Propiedad y errores
- ¿Quién lo libera?C no tiene destructores, así que la propiedad vive en los nombres y los comentarios.
- Los bugs de memoria clásicosFuga, double free, puntero colgante y off-by-one — mostrados para que los reconozcas.
- Un asignador de arenaUn bloque grande, un puntero que avanza y un solo free al final.
- goto para limpiarEl único goto que la gente de C defiende: una sola salida que libera lo que se tomó.
Structs
- StructsAgrupar campos relacionados en un solo tipo de valor.
- Punteros a structMutar un struct a través de un puntero con ->.
- typedefDarles a los tipos nombres más cortos y claros.
Cadenas en memoria
- Invertir en el lugarInvierte en el lugar con dos índices que caminan uno hacia el otro.
- Funciones de la biblioteca de cadenasLos caballos de batalla de <string.h> para las cadenas de C.
Bis
- dynamic_stack.cUna pila de enteros que crece, respaldada por malloc y realloc.
- vector.cUn arreglo que crece como módulo hecho y derecho: create, push, get, destroy.