Documentos de Académico
Documentos de Profesional
Documentos de Cultura
h>
int main() {
int notas[10];
char nombre[20];
char opcion[3];
int n, i;
do {
printf("Ingrese nombre del alumno: ");
scanf("%s", nombre);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct fecha {
int dia;
int mes;
int anno;
};
struct persona {
char nombre[LARGO_NOMBRE + 1];
char rut[LARGO_RUT + 1];
struct fecha fecha_nacimiento;
};
int main() {
struct persona p;
printf("Rut: ");
scanf("%s", p.rut);
printf("\n");
printf("%s tiene %d annos.\n",
p.nombre, ANNO_ACTUAL - p.fecha_nacimiento.anno);
exit(0);
}
La memoria puede ser vista como un gran arreglo de bits. Un bit es la unidad
básica de información que se puede representar en un computador, y puede tener
los valores 0 o 1:
Memoria
┌──────────────────────────────────────────────┐
│...0001001111011000001010110111110001010011...│
└──────────────────────────────────────────────┘
┌───┬────────┬────────┬────────┬────────┬────────┬───┐
│...│00010011│11011000│00101011│01111100│01010011│...│
└───┴────────┴────────┴────────┴────────┴────────┴───┘
Cualquier valor que aparezca en un programa debe ser representado como uno o
varios bytes. Tanto el tamaño como la manera de interpretar un valor están
determinados por su tipo de datos.
Tipos de datos
El tamaño de un valor de tipo char es de 1 byte, y el significado de los bits está
determinado usando la codificación ASCII (pronúnciese «asqui»).
char a;
a
┌───┬────────┬────────┬────────┬────────┬────────┬───┐
│...│ 'u' │11011000│00101011│01111100│01010011│...│
└───┴────────┴────────┴────────┴────────┴────────┴───┘
#include <stdio.h>
int main() {
printf("Tama~nos de los tipos:\n");
/* Tipos enteros */
printf("char: %u bytes\n", sizeof(char));
printf("int: %u bytes\n", sizeof(int));
printf("long int: %u bytes\n", sizeof(long int));
printf("short int: %u bytes\n", sizeof(short int));
/* Tipos reales */
printf("float: %u bytes\n", sizeof(float));
printf("double: %u bytes\n", sizeof(double));
return 0;
}
Direcciones de memoria
Todos los bytes en la memoria tienen una dirección, que no es más que un índice
correlativo.
Dirección Valor
┌────────┐
│ ... │
0xf1e568 │00010011│
0xf1e569 │11011000│
0xf1e56a │00101011│
0xf1e56b │01111100│
0xf1e56c │01010011│
│ ... │
└────────┘
Copie y ejecute este programa, e interprete cómo están distribuidas las variables en
la pila:
#include <stdio.h>
struct fecha {
int anno;
int mes;
int dia;
};
int main() {
int n = 10;
char c = '\n';
float x = 3.14159;
struct fecha h = { 2012, 2, 29 };
char d = '!';
printf("var\taddress\t\tsizeof\n");
printf("n:\t%p\t%u\n", &n, sizeof(n));
printf("c:\t%p\t%u\n", &c, sizeof(c));
printf("x:\t%p\t%u\n", &x, sizeof(x));
printf("h:\t%p\t%u\n", &h, sizeof(h));
printf("d:\t%p\t%u\n", &d, sizeof(d));
printf("\n");
printf("h.anno:\t%p\t%u\n", &h.anno, sizeof(h.anno));
printf("h.mes :\t%p\t%u\n", &h.mes, sizeof(h.mes));
printf("h.dia :\t%p\t%u\n", &h.dia, sizeof(h.dia));
return 0;
}
h.anno: 0xe497f0 4
h.mes : 0xe497f4 4
h.dia : 0xe497f8 4
┌────────┐
0xe497f0 │ 2012 │ h.anno
0xe497f1 │ │
0xe497f2 │ │
0xe497f3 │ │
├────────┤
0xe497f4 │ 2 │ h.mes
0xe497f5 │ │
0xe497f6 │ │
0xe497f7 │ │
├────────┤
0xe497f8 │ 29 │ h.dia
0xe497f9 │ │
0xe497fa │ │
0xe497fb │ │
├────────┤
0xe497fc │ ?????? │
0xe497fd │ ?????? │
0xe497fe │ ?????? │
0xe497ff │ ?????? │
0xe49800 │ ?????? │
0xe49801 │ ?????? │
0xe49802 │ ?????? │
0xe49803 │ ?????? │
├────────┤
0xe49804 │ 3.1415 │ x
0xe49805 │ │
0xe49806 │ │
0xe49807 │ │
├────────┤
0xe49808 │ 10 │ n
0xe49809 │ │
0xe4980a │ │
0xe4980b │ │
├────────┤
0xe4980c │ ?????? │
0xe4980d │ ?????? │
├────────┤
0xe4980e │ '!' │ d
├────────┤
0xe4980f │ '\n' │ c
└────────┘