Estructuras, Arreglos, Cadenas y Punteros en C: Conceptos Básicos y Ejemplos

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,3 KB

1. Definición de una Estructura en C para Datos de un Automóvil

Problema: Definir una estructura en C adecuada para almacenar los siguientes datos de un automóvil:

  • Marca
  • Categoría (compacto, familiar, etc.)
  • Modelo
  • Tamaño del motor
  • Año

Respuesta:


struct datos_auto {
  char marca[30];
  char modelo[10];
  char categoria[30];
  int anyo;
  int tamano; // Tamaño del motor
};

2. Acceso a un Elemento Fuera de los Límites de un Arreglo

Pregunta: ¿Qué sucede si se asigna un valor a un elemento de un arreglo cuyo índice excede el tamaño del arreglo?

Respuesta: Se sobrescriben datos en la memoria, lo que puede llevar a comportamientos inesperados o errores en el programa.

3. Significado del Nombre de un Arreglo

Pregunta: Si se declara un arreglo de la siguiente manera: int lista[12];, ¿qué representa la palabra "lista"?

Respuesta: "lista" representa el nombre del arreglo y, en el contexto de punteros, también puede interpretarse como la dirección de memoria del primer elemento del arreglo.

4. Definición de Cadena en C

Pregunta: En C, ¿qué es una cadena?

Respuesta: Una cadena es un tipo de dato compuesto, esencialmente un arreglo de caracteres, que termina con un carácter nulo ('\0' o NULL).

5. Extracción de una Subcadena

Problema: Asumiendo la siguiente declaración: char cadena[] = "Montenegro";, ¿cuál sería el estatuto para escribir en la salida estándar "negro" (las últimas 5 letras)?

Respuesta:


int i;
for (i = 5; i <= 9; i++) {
  printf("%c", cadena[i]);
}

6. Definición de Puntero

Pregunta: ¿Qué es un puntero?

Respuesta: Un puntero es una variable que almacena la dirección de memoria de otra variable. En otras palabras, un puntero "apunta" a la ubicación en memoria donde se almacenan los datos de una variable.

7. Razones para Usar Punteros

Pregunta: Mencione dos buenas razones para usar punteros.

Respuesta:

  1. Facilitan la manipulación de arreglos y estructuras de datos dinámicas.
  2. Permiten una gestión más eficiente de la memoria, especialmente al trabajar con grandes cantidades de datos.

8. Referencia a un Elemento de un Arreglo

Problema: Suponiendo la declaración de un arreglo de 10 elementos de nombre "tabla", escriba dos formas de hacer referencia al tercer elemento del arreglo.

Respuesta:

  • Notación de arreglo: tabla[2]
  • Notación de puntero: *(tabla + 2)

9. Referencia a un Elemento con Notación de Arreglo y Punteros

Problema: Dada la siguiente declaración: static int arr7[2][3] = {{10, 11, 12}, {13, 14, 15}};, escriba una referencia al elemento del arreglo ocupado por el 14 con notación de arreglo y luego con notación de punteros.

Respuesta:

  • Notación de arreglo: arr7[1][1]
  • Notación de punteros: *(*(arr7 + 1) + 1)

10. Función para Intercambiar Dos Variables

Problema: Escriba el código de una función que intercambie dos variables de tipo int.

Respuesta:


void intercambio(int *a, int *b) {
  int temp = *a;
  *a = *b;
  *b = temp;
}

Nota: En este caso se pasan las variables por referencia, usando punteros.

11. Suma de Elementos de un Arreglo con Punteros

Problema: Asumiendo la declaración static float lista[] = {1.0, 2.0, 3.0, 4.0, 5.0};, escriba el código para determinar la suma de los valores de los elementos del arreglo utilizando punteros (debe declarar las variables que requiera).

Respuesta:


float suma = 0.0;
float *ptr;
float lista[] = {1.0, 2.0, 3.0, 4.0, 5.0};
for (ptr = lista; ptr < lista + 5; ptr++) {
  suma += *ptr;
}

Entradas relacionadas: