Menu
Coddy logo textTech

Hoja de Trucos de C

Última actualización

Hola Mundo y estructura del programa

Cada programa en C empieza en main y devuelve un int.

ElementoCódigo
Incluir una cabecera#include <stdio.h>
Punto de entradaint main(void) { ... }
Con argumentos de línea de comandosint main(int argc, char *argv[]) { ... }
Imprimir una líneaprintf("Hello, World!\n");
Devolver éxitoreturn 0;
Comentario de una línea// comment
Comentario de bloque/* comment */

Tipos de datos

Los tamaños dependen de la plataforma; los mínimos de abajo están garantizados por el estándar.

TipoDescripción
intEntero, al menos 16 bits (normalmente 32)
unsigned intEntero no negativo
long / long longEnteros más anchos (al menos 32 / 64 bits)
float / doublePunto flotante de precisión simple / doble
charUn solo byte, también se usa para caracteres
_Bool (bool vía <stdbool.h>)true o false
size_tTipo sin signo para tamaños e índices
voidSin tipo: se usa para funciones y punteros genéricos

Especificadores de formato de printf y scanf

Marcadores de posición que coinciden con el tipo de cada argumento.

EspecificadorCoincide con
%d / %iint con signo
%uint sin signo
%ld / %lldlong / long long
%fdouble (y float en printf)
%.2fdouble con 2 decimales
%cUn solo char
%sCadena (char *)
%pDirección de un puntero
%xint sin signo en hexadecimal
%zusize_t

Operadores

OperadorSignificado
+ - * / %Aritmética (% es el resto entero)
== !=Igual / distinto
< > <= >=Comparación
&& || !And / or / not lógicos
& | ^ ~ << >>And, or, xor, not y desplazamientos a nivel de bits
++ --Incremento / decremento
+= -= *= /=Asignación compuesta
cond ? a : bCondicional ternario
sizeof(x)Tamaño de un tipo o variable en bytes

Control de flujo

SentenciaSintaxis
If / elseif (x > 0) { ... } else { ... }
Else ifelse if (x == 0) { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
Bucle whilewhile (i < n) { ... }
Bucle do-whiledo { ... } while (i < n);
Bucle forfor (int i = 0; i < n; i++) { ... }
Break / continuebreak; sale de un bucle, continue; salta a la siguiente iteración
Goto (poco común)goto label; ... label:

Funciones

Declara antes de usar o añade un prototipo al inicio del archivo.

OperaciónSintaxis
Definir una funciónint add(int a, int b) { return a + b; }
Prototipo (declaración)int add(int a, int b);
Sin valor de retornovoid greet(void) { ... }
Sin parámetrosint rand_seed(void) { ... }
Paso por puntero (modificar)void inc(int *p) { (*p)++; }
Pasar un arrayint sum(int arr[], int n) { ... }
Estática (local al archivo)static int helper(void) { ... }

Punteros y memoria

Un puntero almacena una dirección. La memoria del heap debe liberarse manualmente.

OperaciónSintaxis
Declarar un punteroint *p;
Dirección dep = &x;
Desreferenciar (leer/escribir)int y = *p; / *p = 10;
Puntero nuloint *p = NULL;
Reservar en el heapint *a = malloc(n * sizeof(int));
Reservar + poner a ceroint *a = calloc(n, sizeof(int));
Redimensionar una reservaa = realloc(a, newSize);
Liberar memoria del heapfree(a);
Aritmética de punteros*(a + i) es lo mismo que a[i]

Arrays y cadenas

Las cadenas en C son arrays de char terminados en \0.

OperaciónSintaxis
Declarar un arrayint nums[5];
Inicializar un arrayint nums[] = {1, 2, 3};
Acceder a un elementonums[0] = 10;
Longitud del array (arrays en pila)sizeof(nums) / sizeof(nums[0])
Literal de cadenachar s[] = "hello";
Longitud de la cadenastrlen(s) (excluye \0)
Copiar una cadenastrcpy(dst, src);
Comparar cadenasstrcmp(a, b) == 0 significa iguales
Concatenar cadenasstrcat(dst, src);

Structs y stdlib común

OperaciónSintaxis
Definir un structstruct Point { int x; int y; };
Declarar y accederstruct Point p; p.x = 1;
Acceder vía punterop->x = 1; (igual que (*p).x)
Alias de tipotypedef struct Point Point;
Leer entradascanf("%d", &n);
Convertir cadena a intint n = atoi("42");
Valor absoluto / potenciaabs(x) (int), pow(x, y) de <math.h>
Ordenar un arrayqsort(arr, n, sizeof(int), cmp);

La sintaxis, los especificadores de formato y los patrones de punteros de C que más usas, en una sola página. Esta hoja de trucos de C es una referencia rápida para escribir C: los tipos de datos, los especificadores de printf/scanf, los operadores, el control de flujo y las operaciones de punteros y memoria que dan problemas.

Todo lo que hay aquí es C estándar (C99/C11) y se compila con gcc o clang. Copia lo que necesites o prueba cualquier fragmento en vivo en el playground de C, sin instalar ningún compilador.

Preguntas frecuentes sobre la hoja de trucos de C

¿Esta hoja de trucos de C es gratis?
Sí. Esta hoja de trucos de C es completamente gratuita, sin necesidad de registrarse. Guárdala en favoritos y vuelve cuando necesites consultar un tipo, un especificador de formato o una operación de punteros.
¿Cuál es la diferencia entre la pila y el heap en C?
La memoria de la pila almacena las variables locales y se libera automáticamente cuando una función retorna: es rápida, pero limitada en tamaño. La memoria del heap se reserva explícitamente con malloc o calloc, vive hasta que llamas a free y se usa cuando necesitas memoria que sobreviva a la función actual o cuyo tamaño solo se conoce en tiempo de ejecución. Olvidar hacer free de la memoria del heap provoca una fuga de memoria.
¿Por qué scanf necesita un ampersand (&) pero printf no?
scanf escribe el valor de vuelta en tu variable, así que necesita la dirección de la variable, que es lo que le da &x. printf solo lee el valor, así que le pasas el valor en sí. La excepción son las cadenas: un array de char ya degenera en un puntero, así que pasas scanf("%s", name) sin el &.
¿Puedo practicar C en línea?
Sí. Abre el playground de C para compilar y ejecutar cualquier fragmento de esta hoja de trucos en tu navegador, sin instalar ningún compilador. Cuando quieras estructura, el curso interactivo y gratuito de C de Coddy te lleva paso a paso desde las variables y los bucles hasta los punteros y la gestión de memoria.
¿Esta hoja de trucos es buena para principiantes?
Sí. Está organizada desde los componentes básicos más comunes (tipos, printf, control de flujo) hasta los avanzados (punteros, memoria, structs), de modo que puedes usar las secciones de arriba desde el primer día e ir avanzando hacia el resto.
Coddy programming languages illustration

Aprende C con Coddy

COMENZAR