LENGUAJE C SEGUNDO PARCIAL Flashcards
(42 cards)
¿Qué es una matriz en C?
Es una estructura de datos que almacena múltiples elementos del mismo tipo en posiciones contiguas de memoria.
¿Qué es un apuntador en C?
Es una variable que almacena la dirección de memoria de otra variable.
¿Cómo se pasan las matrices a funciones usando apuntadores?
Se pasa la dirección de la primera posición de la matriz o un puntero que la representa, evitando copiar toda la matriz.
¿Cómo se representa una matriz bidimensional con apuntadores?
Puede representarse como un puntero a punteros, ya que cada fila es un puntero al primer elemento de esa fila.
Ejemplo de declaración de función que recibe una matriz bidimensional
void procesarMatriz(int (*matriz)[3], int filas);
Ejemplo de declaración de función que usa apuntadores y dimensiones
int sumarMatriz(int *ptr, int filas, int columnas);
Ventajas del uso de apuntadores con matrices
A1: Eficiencia: se evita copiar la matriz al pasarla a funciones.
A2: Manipulación flexible: se pueden crear funciones para manejar matrices de diferentes tamaños.
A3: Acceso dinámico: permite trabajar con matrices cuyo tamaño se define en tiempo de ejecución.
A4: Mayor control de la memoria.
Desventajas del uso de apuntadores con matrices
A1: El código se vuelve más difícil de leer.
A2: Mayor posibilidad de errores (por ejemplo, errores de segmentación).
A3: Difícil depuración.
A4: Restricciones de tipo: deben coincidir los tipos de datos.
Dificultades comunes al usar apuntadores con matrices
A1: Errores de indexación (acceder a memoria no deseada).
A2: Confusión en la notación cuando se usan varios niveles de apuntadores.
A3: Manejo complejo de memoria dinámica.
A4: Uso de punteros a punteros.
Ejemplo para insertar elementos en una matriz usando apuntadores
*(ptr + i * columnas + j) (donde ptr apunta al primer elemento de la matriz).
Ejemplo para imprimir elementos de una matriz usando apuntadores
printf(“%d “, *(ptr + i * columnas + j));
Ejemplo para sumar elementos de una matriz usando apuntadores
suma += *(ptr + i * columnas + j);
Ejemplo de uso de apuntadores con matrices (forma sencilla)
void sumaMatriz(int (*matriz)[3], int filas) {
int suma = 0;
for (int i = 0; i < filas; i++) {
for (int j = 0; j < 3; j++) {
suma += matriz[i][j];
}
}
printf(“La suma de los elementos es: %d\n”, suma);
}
¿Qué sucede cuando una variable se pasa por valor a una función?
La función recibe una copia y cualquier cambio dentro de la función no afecta la variable origina
¿Cómo se pueden pasar argumentos a funciones en C?
Por valor (se pasa una copia) o por referencia usando apuntadores (se pasa la dirección de memoria).
¿Qué sucede cuando una variable se pasa por referencia con un apuntador?
La función puede modificar directamente el valor de la variable original.
Ventajas de usar apuntadores en funciones
A1: Permiten modificar variables fuera del ámbito de la función.
A2: Optimizan memoria, evitando copias de datos.
A3: Son esenciales para trabajar con estructuras de datos dinámicas.
Ejemplo básico de función que usa un apuntador para modificar una variable
void incrementar(int ptr) {
(ptr)++;
}
¿Qué relación tienen los arreglos y los apuntadores en C?
Un arreglo es esencialmente un apuntador al primer elemento de la secuencia.
Equivalencia importante entre arreglos y apuntadores
arr[i] es equivalente a *(arr + i).
¿Cómo se obtiene la dirección base de un arreglo?
&arr[0].
Ejemplo de recorrido de un arreglo con apuntadores
int arr[] = {10, 20, 30, 40, 50};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf(“Elemento %d: %d\n”, i, *(ptr + i));
}
¿Cómo puede un apuntador recorrer un arreglo?
Usando aritmética de apuntadores, por ejemplo: *(ptr + i).
¿Qué es la aritmética de apuntadores en C?
Es el conjunto de operaciones que permiten mover un apuntador a través de la memoria.