Variables y Tipos de Datos
## Objetivos de Aprendizaje
- Declarar e inicializar variables
- Comprender los tipos primitivos
- Dominar la conversión de tipos
- Aprender sobre constantes
## Variables
### Declaración
```c
int age; // Declaración
age = 25; // Asignación
int score = 100; // Declaración + Inicialización
```
### Reglas de Nombres
- Comenzar con letra o guión bajo
- Pueden contener números (después del primer carácter)
- No usar palabras reservadas
- Distingue mayúsculas de minúsculas
```c
int age; // Válido
int _count; // Válido
int $total; // Válido (pero evitar)
int 2ndPlace; // Inválido
int class; // Inválido (palabra reservada)
```
## Tipos de Datos Primitivos
### Tipos Enteros
| Tipo | Tamaño | Rango |
|------|--------|-------|
| `char` | 1 byte | -128 a 127 |
| `short` | 2 bytes | -32,768 a 32,767 |
| `int` | 2-4 bytes | Depende del sistema |
| `long` | 4-8 bytes | Depende del sistema |
| `long long` | 8 bytes | Muy grande |
```c
char c = 'A';
short s = 32000;
int i = 2000000;
long l = 9000000000L;
long long ll = 9000000000000000000LL;
```
### Tipos sin Signo
```c
unsigned int u = 100;
unsigned char uc = 255;
unsigned long ul = 4000000000UL;
```
### Tipos de Punto Flotante
| Tipo | Tamaño | Rango Típico |
|------|--------|--------------|
| `float` | 4 bytes | 1.2e-38 a 3.4e38 |
| `double` | 8 bytes | 2.2e-308 a 1.8e308 |
| `long double` | 16 bytes | Aún más grande |
```c
float pi = 3.14f;
double precise = 3.14159265359;
long double ld = 3.14159265358979323846L;
```
### Tipo Carácter
```c
char grade = 'A';
char newline = '\n';
char ascii = 65; // Valor ASCII
```
### Tipo Booleano (C99)
```c
#include
bool isActive = true;
bool hasPermission = false;
```
## Tamaños de Tipos
```c
#include
int main(void) {
printf("char: %zu bytes\n", sizeof(char));
printf("int: %zu bytes\n", sizeof(int));
printf("float: %zu bytes\n", sizeof(float));
printf("double: %zu bytes\n", sizeof(double));
return 0;
}
```
## Inicialización
### Valores por Defecto
**Advertencia:** ¡Las variables locales no se inicializan automáticamente!
```c
int x; // Valor basura (indefinido)
int y = 0; // Inicializado explícitamente
```
### Estilos de Inicialización
```c
int a = 10; // Inicialización directa
int b = (int)10; // Inicialización con cast
int c = {10}; // Inicialización con llaves (C99)
int d = 0; // Inicialización a cero
```
## Conversión de Tipos
### Implícita (Automática)
```c
int i = 100;
long l = i; // int a long (automático)
double d = i; // int a double (automático)
char c = 'A';
int x = c; // char a int (automático)
```
### Explícita (Cast)
```c
double d = 3.99;
int i = (int)d; // Trunca a 3
float f = 3.14f;
int x = (int)f; // 3
```
### Promoción de Enteros
```c
char c1 = 10;
char c2 = 20;
int sum = c1 + c2; // Promovido a int
```
## Constantes
### Calificador const
```c
const double PI = 3.14159;
const int MAX_SIZE = 100;
// PI = 3.14; // ¡Error! No se puede modificar const
```
### Macro #define
```c
#define PI 3.14159
#define MAX_SIZE 100
#define TRUE 1
#define FALSE 0
```
### enum
```c
enum Color { RED, GREEN, BLUE };
enum Color myColor = RED; // myColor = 0
enum Day { MON = 1, TUE, WED, THU, FRI, SAT, SUN };
```
## Límites
```c
#include
#include
#include
int main(void) {
printf("INT_MAX: %d\n", INT_MAX);
printf("INT_MIN: %d\n", INT_MIN);
printf("UINT_MAX: %u\n", UINT_MAX);
printf("FLT_MAX: %e\n", FLT_MAX);
return 0;
}
```
## Alcance de las Variables
### Alcance de Bloque
```c
int global = 10; // Alcance de archivo
int main(void) {
int local = 20; // Alcance de bloque
for (int i = 0; i < 5; i++) { // Alcance de bucle
// i solo existe aquí
}
return 0;
}
```
### Global vs Local
```c
int counter = 0; // Global
void increment(void) {
counter++; // Accede a global
}
int main(void) {
int counter = 10; // Local (sombrea global)
printf("%d\n", counter); // 10 (local)
printf("%d\n", ::counter); // Error en C (usar nombres diferentes)
return 0;
}
```
## Variables Estáticas
```c
void counter(void) {
static int count = 0; // Retiene valor entre llamadas
count++;
printf("Count: %d\n", count);
}
int main(void) {
counter(); // Count: 1
counter(); // Count: 2
counter(); // Count: 3
return 0;
}
```
## Resumen
- Las variables almacenan valores de datos
- Tipos enteros: char, short, int, long, long long
- Tipos flotantes: float, double, long double
- Usar `const` o `#define` para constantes
- Cast para conversión explícita de tipos
- Las variables locales no se inicializan automáticamente
- Las variables `static` retienen valor entre llamadas
- Usar `` y `` para límites de tipos
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →