Sie sind auf Seite 1von 4

C tiene un rico juego de tipos escalares

En C hay una gran variedad de tipos escalares en funcin del nmero de cifras o de la precisin con la que deseamos trabajar, as que nos permite tomar decisiones acerca del compromiso entre rango/precisin y ocupacin de memoria: a menor rango/precisin, menor ocupacin de memoria int, unsigned int, float, char y unsigned char entre otros. El tipo int El tipo de datos int se usar normalmente para representar nmeros enteros. La especificacin de C no define el rango de valores que podemos representar con una variable de tipo int, es decir, no define el nmero de bits que ocupa una variable de tipo int. No obstante, lo ms frecuente es que ocupe 32 bits. Nosotros asumiremos en este texto que el tamao de un entero es de 32 bits, es decir, 4 bytes. El tipo insigne int Permite hacer ms grande el nmero quitando los nmeros negativos permitiendo un mayor alcance. El tipo flota El tipo de datos float representa nmeros en coma flotante de 32 bits. La codificacin de coma flotante permite definir valores con decimales. El mximo valor que puedes almacenar en una variable de tipo float es 3.40282347 1038. Recuerda que el factor exponencial se codifica en los programas C con la letra ((e)) (o ((E))) seguida del exponente. Ese valor, pues, se codifica as en un programa C: 3.40282347e38. El nmero no nulo ms pequeo (en valor absoluto) que puedes almacenar en una variable float es 1.17549435 1038 El tipo char Es frecuente usar variables de tipo char para almacenar caracteres (de ah su nombre) codificados en ASCII o alguna de sus extensiones (como IsoLatin1). Si una variable a es de tipo char, la asignacin a=0 es absolutamente equivalente a la asignacin a=48, pues el valor ASCII del dgito 0 es 48. El tipo insigne char

Y del mismo modo que haba una versin para enteros de 32 bits sin signo, hay una versin de char sin signo: insigne char. Con un insigne char se puede representar cualquier entero en el rango [0, 255]. Se debe declarar el tipo de toda variable antes de usarla Declarar la variable consiste en darle un nombre (identificador) y asignarle un tipo. Identificadores validos Un identificador es una sucesin de letras (del alfabeto ingles), dgitos y/o el carcter de subrayado ( ) cuyo primer carcter no es un digito. He aqu la relacin de palabras reservadas del lenguaje C: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile y while Sentencias de declaracin Una variable se declara precediendo su identificador con el tipo de datos de la variable. Este fragmento, por ejemplo, declara una variable de tipo entero, otra de tipo entero de un byte (o carcter) y otra de tipo flotante: int a; char b; float c; Se puede declarar una serie de variables del mismo tipo en una sola sentencia de declaracin separando sus identificadores con comas. Este fragmento, por ejemplo, declara tres variables de tipo entero y otras dos de tipo flotante. int x, y, z; float u, v; En sumatorio.c se declaran tres variables de tipo int, a, b y c, y una de tipo float, s. Una variable declarada como de tipo entero solo puede almacenar valores de tipo entero. Una vez se ha declarado una variable, es imposible cambiar su tipo, ni siquiera volviendo a declararla. Declaracin con inicializacin Debes tener presente que el valor inicial de una variable declarada esta indefinido. Jams debes acceder al contenido de una variable que no haya sido previamente inicializada. Si lo haces, el compilador no detectara error alguno, pero tu programa presentara un comportamiento indeterminado: a veces funcionara bien, y a veces mal, lo cual es peor que un funcionamiento siempre incorrecto, pues podras llegar a dar por bueno un programa mal escrito. En esto C se diferencia de Python:

Python abortaba la ejecucin de un programa cuando se intentaba usar una variable no inicializada; C no aborta la ejecucin, pero presenta un comportamiento indeterminado. Puedes inicializar las variables en el momento de su declaracin. Para ello, basta con aadir el operador de asignacin y un valor a continuacin de la variable en cuestin. Mira este ejemplo: 1 #include <stdio.h> 2 3 int main (void) 4{ 5 int a = 2; 6 float b = 2.0, c, d = 1.0, e; 7 8 return 0; 9} En el, las variables a, b y d se inicializan en la declaracin y las variables c y e no tienen valor definido al ser declaradas.

Variables y direcciones de memoria La memoria es una sucesin de celdas numeradas y que una direccin de memoria no es ms que un nmero entero. La declaracin de una variable supone la reserva de una zona de memoria lo suficientemente grande para albergar su contenido. Cuando declaramos una variable de tipo int, por ejemplo, se reservan 4 bytes de memoria en los que se almacenara (codificado en complemento a 2) el valor de dicha variable. Modificar el valor de la variable mediante una asignacin supone modificar el patrn de 32 bits (4 bytes) que hay en esa zona de memoria. El operador & permite conocer la direccin de memoria en la que se almacena una variable: direcciones.c 1 #include <stdio.h> 2 3 int main (void) 4{ 5 int a, b; 6 7 a = 0; 8 b = a + 8; 9 10 printf ("Direccin de a: %u\n", (unsigned int) &a);

11 printf ("Direccin de b: %u\n", (unsigned int) &b); 12 13 return 0; 14} Observa que usamos la marca de formato %u para mostrar el valor de la direccin de memoria, pues debe mostrarse como entero sin signo. La conversin a tipo insigne int evita molestos mensajes de aviso al compilar.11 Direccin de a: 3221222580 Direccin de b: 3221222576 Cmo se interpreta la sentencia de asignacin a = 0? Se interpreta como ((almacena el valor 0 en la direccin de memoria de a)). Y b = a?, cmo se interpreta? Como ((almacena una copia del contenido de a en la direccin de memoria de b)). Fjate bien, el identificador a recibe interpretaciones diferentes segn aparezca a la izquierda o a la derecha de una asignacin: a la izquierda del igual, significa ((la direccin de a)), y a la derecha, es decir, en una expresin, significa ((el contenido de a)). La funcin scanf necesita una direccin de memoria para saber dnde debe depositar un resultado. Como no estamos en una sentencia de asignacin, sino en una expresin, es necesario

Das könnte Ihnen auch gefallen