<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Capítulo 2. Tipos de datos en C</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index_es.html" title="Arquitectura de Sistemas" /><link rel="up" href="c_programming_part_es.html" title="Parte I. Programación en C" /><link rel="prev" href="program_structure_activities_es.html" title="1.3. Actividades" /><link rel="next" href="data_types_structured_data_types_es.html" title="2.2. Tipos de datos estructurados" /><meta name="DC.title" content="" /><meta name="DC.description" content="" /><meta name="DC.date" content="2018-7-18" /><meta name="DC.format" content="text/html" /><meta name="DC.language" content="es" /><meta name="DC.publisher" content="UC3M" /><meta name="DC.creator" content="Pablo Basanta Val, Iria Estévez Ayres, Abelardo Pardo" /><link rel="shortcut icon" href="../CSS/ae_64x64.png" type="image/vnd.microsoft.icon" /><link rel="icon" href="../CSS/ae_64x64.png" type="image/vnd.microsoft.icon" /><meta name="Author" content="Pablo Basanta Val, Iria Estévez Ayres, Abelardo Pardo" /><meta name="languages" content="es" /><link type="text/css" rel="stylesheet" href="../CSS/adagio_style.css" media="all" /><link type="text/css" rel="stylesheet" href="../CSS/as.css" media="all" /><link type="text/css" rel="stylesheet" href="style.css" media="all" /><link type="text/css" rel="stylesheet" href="logo_es.css" media="all" /></head><body id="adagioroot_Computer_architecture_uc3m"><div class="adagio_hidden_elements" id="skip_links"><ul><li><a href="../" accesskey="1">Inicio</a></li><li><a href="#adagio_page_content" accesskey="2">Ir a contenido</a></li><li><a href="#adagio_navigation" accesskey="3">Ir a navegación</a></li></ul></div><div id="adagio_page_navigation"><a name="adagio_navigation" id="adagio_navigation"></a><ul xmlns=""><li><a href="../info/material_es.html">Plan semanal</a></li><li><a href="../info/syllabus_es.html">Reglas</a></li><li><a href="../course_notes/index_es.html">Apuntes del curso</a></li><li><a href="../info/readings_es.html">Bibliografía</a></li><li><a href="https://aulaglobal.uc3m.es">Aula Global</a></li></ul></div><div id="adagio_page_header_level1"><h1 id="adagio_institution_name">UC3M</h1></div><div id="adagio_page_header_level2"><h2 id="adagio_degree_name">Grado en
Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones</h2></div><div id="adagio_page_header_level3"><h3 id="adagio_course_name"><a href="http://www.it.uc3m.es/pbasanta/asng/" title="Arquitectura de Sistemas">Arquitectura de Sistemas</a></h3></div><div id="adagio_page_header_level4"><h4 id="adagio_course_edition">Septiembre 2017 - Enero 2018</h4></div><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Capítulo 2.
<span xml:lang="es" lang="es">Tipos de datos en C</span>
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="program_structure_activities_es.html"><img src="nav_graphics/prev.png" alt="Anterior" /></a> </td><th width="60%" align="center">Parte I.
<span xml:lang="es" lang="es">Programación en C</span>
</th><td width="20%" align="right"> <a accesskey="n" href="data_types_structured_data_types_es.html"><img src="nav_graphics/next.png" alt="Siguiente" /></a></td></tr></table><hr /></div><div id="adagio_page_content"><a name="adagio_page_content_anchor" id="adagio_page_content_anchor"></a><div class="chapter" title="Capítulo 2. Tipos de datos en C" id="data_types"><div class="titlepage"><div><div><h2 class="title">Capítulo 2.
<span xml:lang="es" lang="es">Tipos de datos en C</span>
</h2></div><div></div></div></div><div class="toc"><p><strong>Tabla de contenidos</strong></p><dl><dt><span class="section"><a href="data_types_es.html#data_types_basic">2.1.
<span xml:lang="es" lang="es">Tipos de datos básicos</span>
</a></span></dt><dd><dl><dt><span class="section"><a href="data_types_es.html#data_types_integers">2.1.1.
<span xml:lang="es" lang="es">Enteros</span>
</a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_characters_and_strings">2.1.2.
<span xml:lang="es" lang="es">Letras y cadenas</span>
</a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_real_numbers">2.1.3.
<span xml:lang="es" lang="es">Números reales</span>
</a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_arrays">2.1.4.
<span xml:lang="es" lang="es">Tablas</span>
</a></span></dt><dt><span class="section"><a href="data_types_es.html#data_types_size_of_basic_data_types">2.1.5.
<span xml:lang="es" lang="es">Tamaño de los tipos de datos básicos</span>
</a></span></dt></dl></dd><dt><span class="section"><a href="data_types_structured_data_types_es.html">2.2.
<span xml:lang="es" lang="es">Tipos de datos estructurados</span>
</a></span></dt><dt><span class="section"><a href="data_types_unions_es.html">2.3.
<span xml:lang="es" lang="es">Uniones</span>
</a></span></dt><dt><span class="section"><a href="data_types_enumerations_es.html">2.4.
<span xml:lang="es" lang="es">Enumeraciones</span>
</a></span></dt><dt><span class="section"><a href="data_types_reading_es.html">2.5.
<span xml:lang="es" lang="es">Bibliografía de apoyo</span>
</a></span></dt><dt><span class="section"><a href="data_types_exercises_es.html">2.6.
<span xml:lang="es" lang="es">Ejercicios</span>
</a></span></dt><dt><span class="section"><a href="data_types_activities_es.html">2.7.
<span xml:lang="es" lang="es">Actividades</span>
</a></span></dt><dd><dl><dt><span class="section"><a href="data_types_activities_es.html#c_data_types_activities_solve_exercises">2.7.1.
<span xml:lang="es" lang="es">Resolución de ejercicios sobre definición de datos en
C</span>
</a></span></dt><dt><span class="section"><a href="data_types_activities_string_to_uppercase_es.html">2.7.2.
<span xml:lang="es" lang="es">Manejo de caracteres</span>
</a></span></dt><dt><span class="section"><a href="data_types_activities_copy_a_string_es.html">2.7.3.
<span xml:lang="es" lang="es">Manejo de cadenas
(<span class="foreignphrase"><em class="foreignphrase">Strings</em></span>)</span>
</a></span></dt><dt><span class="section"><a href="data_types_activities_average_of_arrays_es.html">2.7.4.
<span xml:lang="es" lang="es">Manejo de tablas
(<span class="foreignphrase"><em class="foreignphrase">Arrays</em></span>)</span>
</a></span></dt><dt><span class="section"><a href="data_types_activities_design_and_print_struct_es.html">2.7.5.
<span xml:lang="es" lang="es">Manejo de structuras y uniones</span>
</a></span></dt><dt><span class="section"><a href="insertion_sort_and_dichotomic_search_int_arrays_es.html">2.7.6.
<span xml:lang="es" lang="es">Ordenación por inserción y búsqueda dicotómica</span>
</a></span></dt></dl></dd></dl></div><p xml:lang="es" lang="es">Las estructuras de datos del lenguaje C son más simples que
las que ofrece Java porque no existe el concepto de <span class="quote">“<span class="quote">clase</span>”</span> ni de
<span class="quote">“<span class="quote">objeto</span>”</span>. C ofrece tipos de datos básicos y dos construcciones
para crear datos más complejos. El control de acceso a datos que ofrece Java
(métodos y campos privados, públicos y protegidos) no existe en C. Las variable
son globales, locales a un fichero, o locales a un bloque de código.</p><div class="section" title="2.1. Tipos de datos básicos"><div class="titlepage"><div><div><h2 class="title" id="data_types_basic">2.1.
<span xml:lang="es" lang="es">Tipos de datos básicos</span>
</h2></div></div></div><p xml:lang="es" lang="es">C ofrece tres tipos de datos básicos:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p xml:lang="es" lang="es">Números enteros definidos con la palabra clave
<code class="code">int</code></p></li><li class="listitem"><p xml:lang="es" lang="es">Letras o caracteres definidos con la palabra clave
<code class="code">char</code></p></li><li class="listitem"><p xml:lang="es" lang="es">Números reales o en coma flotante definidos con las
palabras claves <code class="code">float</code> o <code class="code">double</code></p></li></ul></div><div class="section" title="2.1.1. Enteros"><div class="titlepage"><div><div><h3 class="title" id="data_types_integers">2.1.1.
<span xml:lang="es" lang="es">Enteros</span>
</h3></div></div></div><p xml:lang="es" lang="es">Se definen con <span class="quote">“<span class="quote"><code class="code">int</code></span>”</span> y admiten
de forma opcional dos prefijos modificadores:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p xml:lang="es" lang="es"><span class="quote">“<span class="quote"><code class="code">short</code></span>”</span> y
<span class="quote">“<span class="quote"><code class="code">long</code></span>”</span>: Modifica el tamaño en bits del
entero. Existen por tanto tres tipos de enteros:
<span class="quote">“<span class="quote"><code class="code">int</code></span>”</span>, <span class="quote">“<span class="quote"><code class="code">short int</code></span>”</span>
(que se puede abreviar como <span class="quote">“<span class="quote"><code class="code">short</code></span>”</span>), y
<span class="quote">“<span class="quote"><code class="code">long int</code></span>”</span> (que se puede abreviar
como <span class="quote">“<span class="quote"><code class="code">long</code></span>”</span>).</p><p xml:lang="es" lang="es">El lenguaje C no define tamaños fijos para sus tipos
de datos básicos. Lo único que garantiza es que un <code class="code">short
int</code> tiene un tamaño <span class="emphasis"><em>menor o igual</em></span> que un
<code class="code">int</code> y este a su vez un tamaño menor o igual a un
<code class="code">long int</code>. Esta característica del lenguaje ha complicado
la creación de programas que sean compatibles entre varias
plataformas.</p></li><li class="listitem"><p xml:lang="es" lang="es"><span class="quote">“<span class="quote"><code class="code">unsigned</code></span>”</span>: define un número
natural (mayor o igual a cero).</p></li></ul></div><div class="note" title="Sugerencia"><h3 class="title">
<span xml:lang="es" lang="es">Sugerencia</span>
</h3><p xml:lang="es" lang="es">En tu entorno de desarrollo crea un fichero de texto con
la siguiente estructura (puedes simplemente copiar y pegar el texto del
siguiente cuadro):</p><pre class="programlisting">int main()
{
}</pre><p xml:lang="es" lang="es">Inserta en la función <code class="code">main</code> varias
definiciones de enteros para probar todas las combinaciones posibles
(hasta diez). Para comprobar que la sintaxis utilizada es correcta abre
una ventana con el intérprete de comandos y, en la carpeta donde se
encuentra el fichero creado, ejecuta el comando <span class="command"><strong>gcc -Wall -o
programa fichero.c</strong></span> reemplazando <span class="command"><strong>fichero.c</strong></span>
por el nombre del fichero que has creado. Si el comando no imprime
mensaje alguno por pantalla, tu programa es correcto. Verás que el
compilador genera un fichero con extensión
<span class="quote">“<span class="quote"><code class="filename">.o</code></span>”</span>, puedes borrarlo.</p></div><div class="section" title="Preguntas de autoevaluación"><div class="titlepage"><div><div><h4 class="title" id="data_types_integer_self_assessment">
<span xml:lang="es" lang="es">Preguntas de autoevaluación</span>
</h4></div></div></div><p xml:lang="es" lang="es">Responde a las siguientes preguntas (comprueba tus
respuestas también compilando el programa):</p><div class="orderedlist"><ol><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_1" id="data_types_int_1"><p xml:lang="es" lang="es">El siguiente programa compila sin errores:</p><pre class="programlisting">void main()
{
int i;
long int j;
long k;
short int l;
short m;
}</pre><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_1','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_1')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_1','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_1_response" id="data_types_int_1_response"></iframe></form></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_2" id="data_types_int_2"><p xml:lang="es" lang="es">El siguiente programa produce un error al compilar
porque se está asignando una variable entera a una sin signo
(natural).</p><pre class="programlisting">void main()
{
unsigned i;
int j = 0;
i = j;
}</pre><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_2','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_2')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_2','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_2_response" id="data_types_int_2_response"></iframe></form></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_int_3" id="data_types_int_3"><p xml:lang="es" lang="es">La declaración <code class="code">unsigned short x</code> es
idéntica a <code class="code">short unsigned x</code>.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><p xml:lang="es" lang="es">Escribe un breve programa y comprueba la respuesta
con el compilador.</p><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_int_3','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_int_3')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_int_3','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_int_3_response" id="data_types_int_3_response"></iframe></form></li></ol></div></div></div><div class="section" title="2.1.2. Letras y cadenas"><div class="titlepage"><div><div><h3 class="title" id="data_types_characters_and_strings">2.1.2.
<span xml:lang="es" lang="es">Letras y cadenas</span>
</h3></div></div></div><p xml:lang="es" lang="es">Las variables de tipo letra se declaran como
<span class="quote">“<span class="quote"><code class="code">char</code></span>”</span>. Para referirse a una letra se rodea de
comillas simples: <code class="code">'M'</code>. Como las letras se representan
internamente como números, el lenguaje C permite realizar operaciones
aritméticas como <code class="code">'M' + 25</code>.</p><p xml:lang="es" lang="es">Las cadenas de texto o
<span class="foreignphrase"><em class="foreignphrase">strings</em></span> son simplemente tablas de
<span class="quote">“<span class="quote"><code class="code">char</code></span>”</span>. Las funciones de biblioteca para
manipular estas cadenas asumen que el último byte tiene valor cero. Las
cadenas de texto se escriben en el programa rodeadas de dobles comillas y
contienen el valor cero al final. A continuación se muestran dos
definiciones:</p><pre class="programlisting">#define SIZE 6
char a = 'A';
char b[SIZE] = "hello";</pre><p xml:lang="es" lang="es">¿Por qué la segunda definición es una tabla de seis
elementos si la palabra tiene sólo cinco letras?</p><div class="note" title="Sugerencia"><h3 class="title">
<span xml:lang="es" lang="es">Sugerencia</span>
</h3><p xml:lang="es" lang="es">Reutiliza el programa de la sección anterior y añade
definiciones de letras y cadenas. Para estas últimas prueba a poner
diferentes tamaños de tabla (demasiado pequeños y demasiado
grandes para la cadena). Escribe también expresiones aritméticas sobre
las letras. Recuerda que si el compilador no emite mensaje alguno, el
programa es correcto.</p></div><div class="section" title="Preguntas de autoevaluación"><div class="titlepage"><div><div><h4 class="title" id="data_types_characters_and_strings_selfassessment">
<span xml:lang="es" lang="es">Preguntas de autoevaluación</span>
</h4></div></div></div><div class="orderedlist"><ol><li class="listitem"><p xml:lang="es" lang="es">Considera la siguiente declaración:</p><pre class="programlisting">#define SIZE 6
char m[SIZE] = 'strag';</pre><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_1" id="data_types_char_1"><p xml:lang="es" lang="es">Es incorrecta porque la cadena debe ir rodeada de
dobles comillas.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_1','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_1')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_1','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_1_response" id="data_types_char_1_response"></iframe></form><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_2" id="data_types_char_2"><p xml:lang="es" lang="es">Es incorrecta porque el tamaño debe ser 5 (tiene
cinco letras).</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Falso</p></li></ul></div><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_2','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_2')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_2','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_2_response" id="data_types_char_2_response"></iframe></form><p xml:lang="es" lang="es">Si te parece que las respuestas correctas están equivocadas,
escribe esa declaración en un programa y compílalo.</p></li><li class="listitem"><script src="../CSS/quizconfig.js"></script><form method="POST" class="adagio_embedded_quiz" name="data_types_char_3" id="data_types_char_3"><p xml:lang="es" lang="es">Un programa C que imprime el resultado de la
expresión <code class="code">'M' + 25</code> es correcto e imprime una
<span class="quote">“<span class="quote">f</span>”</span>.</p><div class="itemizedlist adagio_quiz_question"><ul class="itemizedlist" style="list-style-type: none; padding: 0; margin-left: 2em;"><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="YES" />Verdadero</p></li><li class="listitem" style="background-image: none; background-repeat: no-repeat; background-position: 0 0; padding-left: 1.5em;"><p><input type="radio" name="question1" value="NO" />Falso</p></li></ul></div><p xml:lang="es" lang="es">Te recomendamos que escribas ese programa. Para
imprimir pon <code class="code">printf("%c\n", 'M' + 25);</code>.</p><div class="adagio_embedded_quiz_buttons"><input type="button" name="B1" onClick="gradeit('data_types_char_3','../CSS/')" value="Corregir" /><input style="display: none;" type="button" name="B2" onClick="resetit('data_types_char_3')" value="De nuevo" /><input style="display: none;" type="button" name="B3" onClick="showit('data_types_char_3','../CSS/')" value="Soluciones" /></div><iframe src="about:blank" style="display: none; width: 0px; height:0px" name="data_types_char_3_response" id="data_types_char_3_response"></iframe></form></li></ol></div></div></div><div class="section" title="2.1.3. Números reales"><div class="titlepage"><div><div><h3 class="title" id="data_types_real_numbers">2.1.3.
<span xml:lang="es" lang="es">Números reales</span>
</h3></div></div></div><p xml:lang="es" lang="es">Los números reales se definen con
<span class="quote">“<span class="quote"><code class="code">float</code></span>”</span> o <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span>. La
diferencia entre ambas es la precisión que ofrece su representación
interna. Hay un número infinito de reales, pero se representan con un
número finito de bits. A mayor número de bits, mayor número de reales se
representan, y por tanto, mayor precisión. Los reales definidos con
<span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> tienen un tamaño doble a los definidos
con <span class="quote">“<span class="quote"><code class="code">float</code></span>”</span>. Al igual que en el caso de los
enteros, el tamaño de estas representaciones varía de una plataforma a
otra.</p><p xml:lang="es" lang="es">Algunas plataformas ofrecen números reales con tamaño
mayor al <span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> que se definen como
<span class="quote">“<span class="quote"><code class="code">long double</code></span>”</span>. Los tamaños típicos para los
tipos <span class="quote">“<span class="quote"><code class="code">float</code></span>”</span>,
<span class="quote">“<span class="quote"><code class="code">double</code></span>”</span> y <span class="quote">“<span class="quote"><code class="code">long
double</code></span>”</span> son 4, 8 y 12 bytes respectivamente. A continuación
se muestran varias definiciones de números reales.</p><pre class="programlisting">float a = 3.5;
double b = -5.4e-12;
long double c = 3.54e320;</pre><div class="note" title="Sugerencia"><h3 class="title">
<span xml:lang="es" lang="es">Sugerencia</span>
</h3><p xml:lang="es" lang="es">Añade al programa de los apartados anteriores
definiciones de números reales. Prueba a definir números muy grandes o
pequeños para ver la capacidad de representación de los tres
tipos. Compila para ver si las definiciones son correctas.</p></div></div><div class="section" title="2.1.4. Tablas"><div class="titlepage"><div><div><h3 class="title" id="data_types_arrays">2.1.4.
<span xml:lang="es" lang="es">Tablas</span>
</h3></div></div></div><p xml:lang="es" lang="es">Las tablas en C son prácticamente idénticas a las de Java,
con el tamaño entre corchetes a continuación del nombre. Al igual que en
Java, los índices de la tabla comienzan por cero. A continuación se
muestran algunos ejemplos:</p><pre class="programlisting">#define SIZE_TABLE 100
#define SIZE_SHORT 5
#define SIZE_LONG 3
#define SIZE_NAME 10
int table[SIZE_TABLE];
short st[SIZE_SHORT] = { 1, 2, 3, 4, 5 };
long lt[SIZE_LONG] = { 20, 30, 40};
char name[SIZE_NAME];</pre><p xml:lang="es" lang="es">Los elementos de la tabla se acceden con el nombre de la
tabla seguido del índice entre corchetes.</p><p xml:lang="es" lang="es">Una de las diferencias entre C y Java es que el acceso a
una tabla en C no se verifica. Cuando se ejecuta un programa en Java si se
accede a una tabla con un índice incorrecto, se genera una excepción de
tipo <span class="quote">“<span class="quote"><code class="code">ArrayIndexOutOfBounds</code></span>”</span>. Estas
comprobaciones no se hacen <span class="emphasis"><em>nunca</em></span> en C (a no ser que
se escriban explícitamente en el programa). Si se accede a una tabla con
un índice incorrecto se manipulan datos en una zona de memoria incorrecta
y el programa continua su ejecución.</p><p xml:lang="es" lang="es">Tras este acceso incorrecto pueden suceder dos cosas. La
primera es que la memoria a la que ha accedido por error esté fuera de los
límites del programa. En este caso la ejecución termina de manera abrupta
y en el intérprete de comandos se muestra el mensaje
<span class="quote">“<span class="quote"><span class="command"><strong>segmentation fault</strong></span></span>”</span>. La otra posibilidad
es que se acceda a otro lugar dentro de los datos del programa. Esta
situación seguramente producirá un error cuyos síntomas sean difíciles de
relacionar con el acceso incorrecto.</p><div class="section" title="Tablas de múltiples dimensiones"><div class="titlepage"><div><div><h4 class="title" id="data_types_multiple_dimension_arrays">
<span xml:lang="es" lang="es">Tablas de múltiples dimensiones</span>
</h4></div></div></div><p xml:lang="es" lang="es">C permite la definición de tablas de múltiples
dimensiones escribiendo los diferentes tamaños rodeados de corchetes y
concatenados. El acceso se realiza concatenando tantos índices como sea
preciso rodeados de corchetes. Al igual que en el caso de las tablas
unidimensionales, no se realiza ningún tipo de comprobación de los
índices cuando se accede a un elemento. A continuación se muestra la
definición de tablas de más de una dimensión.</p><pre class="programlisting">#define MATRIX_A 100
#define MATRIX_B 30
#define COMMON_SIZE 10
int matrix[MATRIX_A][MATRIX_B];
long squarematrix[COMMON_SIZE][COMMON_SIZE];
char soup[COMMON_SIZE][COMMON_SIZE];</pre></div><div class="note" title="Sugerencia"><h3 class="title">
<span xml:lang="es" lang="es">Sugerencia</span>
</h3><p xml:lang="es" lang="es">Añade al programa de los apartados anteriores
definiciones y manipulación de tablas de los diferentes tipos de datos
básicos. Comprueba que son correctos sintácticamente mediante el
compilador.</p></div></div><div class="section" title="2.1.5. Tamaño de los tipos de datos básicos"><div class="titlepage"><div><div><h3 class="title" id="data_types_size_of_basic_data_types">2.1.5.
<span xml:lang="es" lang="es">Tamaño de los tipos de datos básicos</span>
</h3></div></div></div><p xml:lang="es" lang="es">En C, el tamaño de los tipos de datos básicos puede variar
de una plataforma a otra. Esta característica está detrás de buena parte
de las críticas que recibe este lenguaje, pues de ella se derivan
problemas de compatibilidad (una aplicación se comporta de forma diferente
cuando se ejecuta en plataformas diferentes).</p><p xml:lang="es" lang="es">A modo de ejemplo, en la siguiente tabla se incluyen los
tamaños de los tipos de datos para las plataformas Linux/Intel i686.</p><div class="table"><a id="data_type_basic_sizes"></a><p class="title"><strong>Tabla 2.1.
<span xml:lang="es" lang="es">Tamaños de los tipos de datos en C en la plataforma
Linux/Intel i686</span>
</strong></p><div class="table-contents"><table summary=" Tamaños de los tipos de datos en C en la plataforma Linux/Intel i686 	" border="1"><colgroup><col align="left" class="col1" /><col align="center" class="col2" /></colgroup><thead><tr><th class="table_colored_cell_1" align="center">
<span xml:lang="es" lang="es">Tipo</span>
</th><th class="table_colored_cell_1" align="center">
<span xml:lang="es" lang="es">Tamaño</span>
(bytes)
</th></tr></thead><tbody><tr><td align="left"><code class="code">char</code>, <code class="code">unsigned char</code></td><td align="center">1</td></tr><tr><td align="left">
<code class="code">short int</code>, <code class="code">unsigned short int</code>
</td><td align="center">2</td></tr><tr><td align="left">
<code class="code">int</code>, <code class="code">unsigned int</code>, <code class="code">long
int</code>, <code class="code">unsigned long int</code>
</td><td align="center">4</td></tr><tr><td align="left"><code class="code">float</code></td><td align="center">4</td></tr><tr><td align="left"><code class="code">double</code></td><td align="center">8</td></tr><tr><td align="left"><code class="code">long double</code></td><td align="center">12</td></tr></tbody></table></div></div><br class="table-break" /></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="program_structure_activities_es.html"><img src="nav_graphics/prev.png" alt="Anterior" /></a> </td><td width="20%" align="center"><a accesskey="u" href="c_programming_part_es.html"><img src="nav_graphics/up.png" alt="Subir" /></a></td><td width="40%" align="right"> <a accesskey="n" href="data_types_structured_data_types_es.html"><img src="nav_graphics/next.png" alt="Siguiente" /></a></td></tr><tr><td width="40%" align="left" valign="top">1.3.
<span xml:lang="es" lang="es">Actividades</span>
</td><td width="20%" align="center"><a accesskey="h" href="index_es.html"><img src="nav_graphics/home.png" alt="Inicio" /></a></td><td width="40%" align="right" valign="top"> 2.2.
<span xml:lang="es" lang="es">Tipos de datos estructurados</span>
</td></tr></table></div><div id="adagio_page_footer"><a href="http://www.uc3m.es">© Universidad Carlos III de
Madrid</a> |
<a id="cc_license_icon" href="http://creativecommons.org/licenses/by-nc-sa/3.0/es/">Licencia Creative
Commons</a></div><script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
var pageTracker = _gat._getTracker("UA-68116639-1");
pageTracker._trackPageview();
</script></body></html>