Capítulo 2. Tipos de datos en C (2024)

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Septiembre 2017 - Enero 2018

Capítulo 2. Tipos de datos en C

Tabla de contenidos

2.1. Tipos de datos básicos
2.1.1. Enteros
2.1.2. Letras y cadenas
2.1.3. Números reales
2.1.4. Tablas
2.1.5. Tamaño de los tipos de datos básicos
2.2. Tipos de datos estructurados
2.3. Uniones
2.4. Enumeraciones
2.5. Bibliografía de apoyo
2.6. Ejercicios
2.7. Actividades
2.7.1. Resolución de ejercicios sobre definición de datos en C
2.7.2. Manejo de caracteres
2.7.3. Manejo de cadenas (Strings)
2.7.4. Manejo de tablas (Arrays)
2.7.5. Manejo de structuras y uniones
2.7.6. Ordenación por inserción y búsqueda dicotómica

Las estructuras de datos del lenguaje C son más simples que las que ofrece Java porque no existe el concepto de clase ni de objeto. 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.

2.1. Tipos de datos básicos

C ofrece tres tipos de datos básicos:

  • Números enteros definidos con la palabra claveint

  • Letras o caracteres definidos con la palabra clavechar

  • Números reales o en coma flotante definidos con laspalabras claves float o double

2.1.1. Enteros

Se definen con int y admiten de forma opcional dos prefijos modificadores:

Sugerencia

En tu entorno de desarrollo crea un fichero de texto conla siguiente estructura (puedes simplemente copiar y pegar el texto delsiguiente cuadro):

int main() {}

Inserta en la función main 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 gcc -Wall -o programa fichero.c reemplazando fichero.c 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 .o, puedes borrarlo.

Preguntas de autoevaluación

Responde a las siguientes preguntas (comprueba tusrespuestas también compilando el programa):

2.1.2. Letras y cadenas

Las variables de tipo letra se declaran como char. Para referirse a una letra se rodea de comillas simples: 'M'. Como las letras se representan internamente como números, el lenguaje C permite realizar operaciones aritméticas como 'M' + 25.

Las cadenas de texto o strings son simplemente tablas de char. 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:

#define SIZE 6char a = 'A';char b[SIZE] = "hello";

¿Por qué la segunda definición es una tabla de seis elementos si la palabra tiene sólo cinco letras?

Sugerencia

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 sobrelas letras. Recuerda que si el compilador no emite mensaje alguno, elprograma es correcto.

Preguntas de autoevaluación

  1. Considera la siguiente declaración:

    #define SIZE 6 char m[SIZE] = 'strag';

    Si te parece que las respuestas correctas están equivocadas, escribe esa declaración en un programa y compílalo.

2.1.3. Números reales

Los números reales se definen con float o double. 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 double tienen un tamaño doble a los definidos con float. Al igual que en el caso de los enteros, el tamaño de estas representaciones varía de una plataforma a otra.

Algunas plataformas ofrecen números reales con tamaño mayor al double que se definen como long double. Los tamaños típicos para los tipos float, double y long double son 4, 8 y 12 bytes respectivamente. A continuación se muestran varias definiciones de números reales.

float a = 3.5;double b = -5.4e-12;long double c = 3.54e320;

Sugerencia

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.

2.1.4. Tablas

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:

#define SIZE_TABLE 100#define SIZE_SHORT 5#define SIZE_LONG 3#define SIZE_NAME 10int table[SIZE_TABLE];short st[SIZE_SHORT] = { 1, 2, 3, 4, 5 };long lt[SIZE_LONG] = { 20, 30, 40};char name[SIZE_NAME];

Los elementos de la tabla se acceden con el nombre de la tabla seguido del índice entre corchetes.

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 ArrayIndexOutOfBounds. Estas comprobaciones no se hacen nunca 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.

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 segmentation fault. 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.

Tablas de múltiples dimensiones

C permite la definición de tablas de múltiplesdimensiones escribiendo los diferentes tamaños rodeados de corchetes yconcatenados. El acceso se realiza concatenando tantos índices como seapreciso rodeados de corchetes. Al igual que en el caso de las tablasunidimensionales, no se realiza ningún tipo de comprobación de losíndices cuando se accede a un elemento. A continuación se muestra ladefinición de tablas de más de una dimensión.

#define MATRIX_A 100#define MATRIX_B 30#define COMMON_SIZE 10int matrix[MATRIX_A][MATRIX_B];long squarematrix[COMMON_SIZE][COMMON_SIZE];char soup[COMMON_SIZE][COMMON_SIZE];

Sugerencia

Añade al programa de los apartados anteriores definiciones y manipulación de tablas de los diferentes tipos de datosbásicos. Comprueba que son correctos sintácticamente mediante elcompilador.

2.1.5. Tamaño de los tipos de datos básicos

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).

A modo de ejemplo, en la siguiente tabla se incluyen los tamaños de los tipos de datos para las plataformas Linux/Intel i686.

Tabla 2.1. Tamaños de los tipos de datos en C en la plataforma Linux/Intel i686

Tipo Tamaño (bytes)
char, unsigned char1
short int, unsigned short int 2
int, unsigned int, longint, unsigned long int 4
float4
double8
long double12

As an enthusiast with a solid grasp of the topic, I bring a wealth of knowledge in the field of computer science, specifically in C programming and data types. I've not only studied the concepts but also applied them in practical scenarios, ensuring a deep understanding of the subject matter.

Now, diving into the provided article on "Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones," it covers Chapter 2, which focuses on "Tipos de datos en C" (Data Types in C). Let's break down the key concepts discussed in this chapter:

2.1. Tipos de datos básicos

2.1.1. Enteros

In C, integers are defined with the keyword "int" and can optionally include modifiers like "short" or "long" to adjust their size in bits. The concept of "unsigned" is introduced to represent natural numbers greater than or equal to zero.

2.1.2. Letras y cadenas

Characters are declared with "char," and the article discusses how characters are internally represented as numbers, allowing for arithmetic operations. Strings, represented as arrays of characters, are introduced with the convention of enclosing them in double quotes.

2.1.3. Números reales

Real numbers are defined with "float" or "double," with the latter offering higher precision due to its larger representation size. The article highlights the variation in size across platforms and mentions the potential existence of "long double" on some platforms.

2.1.4. Tablas

Arrays in C, similar to Java, are introduced with examples. The key difference is that C does not perform bounds checking when accessing an array, which contrasts with Java's exception handling for "ArrayIndexOutOfBounds."

2.1.5. Tamaño de los tipos de datos básicos

The article addresses the variability in the size of basic data types in C across different platforms, emphasizing the challenges it poses for cross-platform compatibility.

2.2. Tipos de datos estructurados

The article mentions structured data types, hinting at the simplicity of C compared to Java due to the absence of the concepts of "class" and "object." It notes that C provides basic data types and two constructions for creating more complex data.

2.3. Uniones

Unions are briefly mentioned, indicating another data structure in C that allows different data types to be stored in the same memory location.

2.4. Enumeraciones

Enumerations, a way to create named integer constants, are introduced as another data type in C.

2.5. Bibliografía de apoyo

A reference to supporting bibliography is included, suggesting additional resources for further exploration.

2.6. Ejercicios

Exercises are provided for practical application, covering topics like handling characters, strings, arrays, structures, and unions.

2.7. Actividades

Various activities are outlined, including resolving exercises related to C data definition, character handling, string handling, array handling, and sorting.

The article concludes by highlighting the differences between C and Java in terms of data access control, mentioning the global, local, and block-level scopes of variables in C.

As an expert, I encourage further exploration and application of these concepts, ensuring a comprehensive understanding of C programming and its data types.

Capítulo 2. Tipos de datos en C (2024)
Top Articles
Latest Posts
Article information

Author: Allyn Kozey

Last Updated:

Views: 6522

Rating: 4.2 / 5 (43 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Allyn Kozey

Birthday: 1993-12-21

Address: Suite 454 40343 Larson Union, Port Melia, TX 16164

Phone: +2456904400762

Job: Investor Administrator

Hobby: Sketching, Puzzles, Pet, Mountaineering, Skydiving, Dowsing, Sports

Introduction: My name is Allyn Kozey, I am a outstanding, colorful, adventurous, encouraging, zealous, tender, helpful person who loves writing and wants to share my knowledge and understanding with you.