C es estricto con lo que guarda en la memoria. No adivina. Tienes que decirle exactamente qué tipo de datos estás almacenando. Esto no es sólo pedantería. Afecta la forma en que se ejecuta su programa, la cantidad de memoria que utiliza y si sus cálculos salen bien o son basura.
Los tipos de variables estándar
Hay tres tipos de variables estándar en C.
Entero: int
Este es un entero de 4 bytes. Maneja números enteros.
Punto flotante: flotante
Este es un valor de punto flotante de 4 bytes. Maneja decimales.
Carácter: char
Este es un carácter único de 1 byte. Piense en “a” o “3”. Una cadena en C es sólo una matriz de estos caracteres.
Luego están los tipos derivados. Los usas cuando los tres estándar no son suficientes.
double: un valor de punto flotante de 8 bytes. Más precisión.short: un entero de 2 bytes. Menos memoria, menos alcance.unsigned shortounsigned int: estos manejan solo números enteros positivos. Sin señal. Si necesita realizar un seguimiento del recuento de población o del tamaño de los paquetes, esta suele ser la opción correcta.
Operadores y precedencia de operadores
Los operadores en C parecen familiares.
+suma-resta- división
/ *multiplicación- Modificación
%
Pero cuidado con la división. El operador / realiza la división de números enteros si ambos operandos son números enteros. De lo contrario, realiza una división en coma flotante.
Mira este código:
Imprime un valor de punto flotante porque “a” está declarado como tipo “flotante”. Pero “a” será 3.0. ¿Por qué? Porque el código realizó primero la división de enteros. 10 dividido por 3 es 3. El resultado es 3. Luego, ese 3 se convierte a 3,0 cuando se almacena en a. La precisión se perdió incluso antes de llegar a la variable.
Precedencia de operadores en C sigue reglas estándar. La división y la multiplicación ocurren antes que la suma y la resta.
El resultado de 5+3*4 es 17. No 32. El operador * tiene mayor prioridad que +. Puede anular esto con paréntesis. (5+3)*4 es 32. El 5+3 se evalúa primero.
La precedencia se complica más tarde. Una vez que los punteros ingresan al chat, se vuelve complicado. Pero por ahora, recuerda: multiplica y divide antes de sumar y restar.
Encasillamiento
C le permite convertir tipos sobre la marcha. Esto se hace a menudo con sugerencias. También ocurre automáticamente durante la asignación para ciertos tipos.
En el ejemplo anterior, el resultado entero de “10/3” se convirtió automáticamente en un valor flotante. Pero ¿y si quisieras el decimal?
Para encasillar, coloque el nombre del tipo entre paréntesis antes del valor.
Reemplace a=10/3; por a=(flotante)10/3;.
Ahora “a” es 3,33333. El 10 se convierte en un valor de coma flotante antes de la división. La división ocurre en terrenos de coma flotante. El resultado mantiene sus decimales.
Definición de tipo
Puede declarar tipos con nombre definidos por el usuario en C con la declaración typedef. Esto es común en el código C.
Esto le permite declarar tipos booleanos. C no tiene un tipo “bool” nativo en estándares más antiguos, por lo que esta es una solución alternativa.
Si no te gusta la palabra “flotar”, puedes decir:
Luego más tarde:
Coloque declaraciones typedef en cualquier parte del programa. Sólo asegúrese de que lleguen antes de su primer uso.
Estructuras
Las estructuras en C agrupan variables en un paquete.
Siempre que quieras declarar estructuras de tipo rec, debes decir struct rec. Esto es fácil de olvidar. Obtendrá errores del compilador si omite la “estructura”.
Puedes comprimir el código:
Aquí, la declaración de tipo y la variable r se declaran en la misma declaración.
O utilice typedef para el nombre de la estructura. Si odias escribir struct rec r cada vez:
Luego declare registros diciendo:
Acceda a los campos utilizando un punto. r.a = 5;.
matrices
Declaras matrices insertando un tamaño después de la declaración normal.
Las matrices son bloques de memoria contiguos. Acceder a un índice fuera de los límites es un comportamiento indefinido. Podría estrellarse. Podría dañar los datos. Puede parecer que funciona hasta que deja de funcionar.
Incrementando
C tiene atajos para operaciones comunes.
i = i + 1;se convierte eni++;i = i - 1;se convierte eni--;i = i + 3;se convierte eni += 3;i = i * j;se convierte eni *= j;
Estos no son sólo azúcar sintáctico. A menudo compilan en código de máquina más eficiente. Úselos.
Errores de C que se deben evitar
El operador / con dos números enteros es una trampa. Trunca la parte decimal. Siempre verifique sus tipos antes de dividir. Si necesita precisión, primero convierta un operando en “flotante” o “doble”.
Piénsalo cada vez que lo uses. De lo contrario, tus números estarán equivocados. Y depurar problemas de división de enteros es doloroso.
Prueba esto
- Experimente con el encasillamiento. Pruebe con
int,char,float. Mira lo que sucede cuando los mezclas. - Crear una serie de registros. Escriba código para ordenar esa matriz en un campo entero. Le enseña sobre punteros, diseño de memoria y flujo de control.
Los detalles importan en C. Si se omite un tipo, todo el programa se rompe. Hágalo bien y funcionará rápido.


























