Conceptos básicos de almacenamiento de variables para la programación c
El almacenamiento digital se mide en bytes. Aunque aparece en el lenguaje de programación C, toda la información almacenada dentro de la memoria no es más que una masa de datos, bits apilados sobre los bits, bytes en bytes. Todo depende de que el software de dar sentido a todo eso.
Introducción al almacenamiento de variables
En la programación C, los datos se clasifica por tipo de almacenamiento (char, int, float, o doble) y más clasificados por palabras clave (largo, corto, firmado o sin firmar). A pesar del caos dentro de la memoria, almacenamiento de su programa está organizado en estos valores, listo para su uso en el código.
Dentro de un programa que se ejecuta, una variable se describe estos atributos:
Nombre: el nombre que le dan la variable. El nombre se usa sólo en el código, no cuando se ejecuta el programa.
Escribe: uno de los tipos de variables del lenguaje C: char, int, float, y dobles.
Contenido: establecido en su programa cuando una variable se le asigna un valor. Aunque pueden existir datos en la ubicación de almacenamiento de la variable de antemano, se considera basura, y la variable se considera sin inicializar hasta que se le asigna un valor.
Localización: una dirección, un lugar dentro de la memoria del dispositivo. Este aspecto de una variable es algo que usted no necesita dictate- el sistema operativo del programa y negociar, donde la información se almacena internamente. Cuando el programa se ejecuta, utiliza la ubicación para acceder a datos de una variable.
De estos aspectos, de la variable de nombre, tipo y contenido ya se conocen a usted. La ubicación de la variable también se puede recoger. No sólo eso, pero la ubicación puede ser manipulado, que es la inspiración detrás de los punteros.
¿Cómo leer el tamaño de una variable
¿Qué tan grande es un char? ¿Por cuánto tiempo es mucho? Sólo el dispositivo que está programando sabe el tamaño de almacenamiento exacta de variables estándar de C.
¿Qué tan grande es una variable? utiliza el operador sizeof para determinar la cantidad de almacenamiento cada idioma C tipo de variable ocupa en la memoria.
¿Cuán grande es una variable?
#include int main () {char c = C'-int 'i = 123-float f = 98,6 doble d = 6.022E23-printf("chart%un",sizeof(c))-printf("intt%un",sizeof(i))-printf("floatt%un",sizeof(f))-printf("doublet%un",sizeof(d))-return(0)-}
Ejercicio 1: Escriba el código fuente ¿Qué tan grande es una variable? en su editor. Genere y ejecute para ver el tamaño de cada tipo de variable.
Aquí está la salida:
Char 1int 4float 4Haga 8
La palabra clave sizeof no es una función. Se trata más de un operador. Su argumento es un nombre de variable. El valor que se devuelve es de la variable tipo de lenguaje C conocida como size_t.
La variable size_t es una typedef de otro tipo de variable, como un int sin firmar en un PC o un unsigned int largo en otros sistemas informáticos. La conclusión es que el tamaño indica el número de bytes utilizados para almacenar esa variable.
Las matrices son también variables en C, y sizeof trabaja en ellos.
¿Cuán grande es una matriz?
# include () {char string principal int [] = "¿Esta cadena hace que parece gordo?" - printf (% s "La cadena ". "Tiene un tamaño de% u n", string, sizeof (string )) - retorno (0) -}
Ejercicio 2: Escriba el código fuente ¿Qué tan grande es una matriz? Construir y ejecutarlo para ver la cantidad de almacenamiento ocupa la matriz de caracteres.
Ejercicio 3: Edite el código fuente de ¿Qué tan grande es una matriz? añadiendo la función strlen () para comparar su resultado en la matriz con resultado del operador sizeof.
Si los valores devueltos por strlen () y sizeof difieren, ¿puede explicar la diferencia?
Cuando se crea una matriz, el programa asigna espacio en la memoria para mantener los valores de la matriz. La asignación se basa en el tamaño de cada elemento de la matriz. Así que una matriz de caracteres de 35 artículos (incluyendo el 0 o NULL) ocupa 35 bytes de almacenamiento, pero la longitud de la cuerda es todavía sólo 34 caracteres (bytes).
Ejercicio 4: Editar el código fuente del Ejercicio 2, esta vez la creación de un array int con cinco elementos. El arreglo no necesita ser asignado ningún valor, ni necesita que se mostrará. Genere y ejecute.
¿Puede explicar la salida? Si no es así, revise la salida del Ejercicio 1. Trate de averiguar lo que está pasando.
¿Qué tan grande es una estructura?
#include int main () {struct robot {int nombre vivo-char [5] xpos-INT -INT ypos-int fuerza -} - printf ("El tamaño del mal struct robot es% u n", sizeof (struct robot) ) -Retorno (0) -}
Ejercicio 5: Inicie un nuevo proyecto mediante el código que se muestra en ¿Cómo grande es una estructura? Genere y ejecute para determinar el tamaño de la variable de estructura.
El operador sizeof funciona en todos los tipos de variables, pero por una estructura, especifique la estructura misma. Usar la palabra clave struct seguido del nombre de la estructura, como se muestra en la línea 14. Evite el uso de una variable de estructura.
El tamaño de la estructura se determina sumando el requisito de almacenamiento para cada uno de sus elementos. Es posible suponer, dado el tamaño de salida del Ejercicio 18-5, que cuatro variables int más cinco variables de carbonilla le daría 21: 4 x 4 + 1 x 5. Pero no funciona de esa manera.
Aquí está la salida:
El tamaño struct robot mal es 24
La razón que usted ve a un valor distinto de 21 es que el programa se alinea las variables en la memoria. No apile para arriba, uno tras otro. Que el 3 bytes adicionales se rellenan al final de la matriz nombre a mantenerlo alineado con un desplazamiento en la memoria de 8 bytes.
El operador sizeof devuelve el tamaño de una variable de lenguaje C. Incluye el tamaño de una estructura.
No se puede usar sizeof para determinar el tamaño de su programa o el tamaño de otra cosa que no sea una variable.
Cuando utilice sizeof en una variable de estructura, se obtiene el tamaño de esa variable, que puede ser menor que el tamaño declarado de la estructura. Un problema puede ocurrir cuando se escribe estructuras a un archivo si se utiliza el tamaño de la variable en lugar de tamaño definido de la estructura.
El desplazamiento de 8 bytes utilizado para alinear las variables en la memoria mantiene la CPU feliz. El procesador es mucho más eficiente en la lectura de la memoria alineado a esas compensaciones de 8 bytes.