Punteros - stefano-sosac/arquitectura-de-computadoras GitHub Wiki

Un puntero se puede considerar una variable que almacena la dirección de memoria de otra variable. En C, la asignación de punteros se asigna de la siguiente manera:

int var = 5;
int *ptr = &var;

Cuando se coloca int *ptr se está declarando un puntero a un entero; por lo tanto, &var debe brindar la dirección de memoria que se le asigna a ptr.

Punteros y Arreglos

Los conceptos de arreglos y punteros están directamente relacionados en C. El nombre de un arreglo es un puntero constante al primer elemento del arreglo.

int arr[3] = {10, 20, 30};
int *ptr = arr;

Visibilización de direcciones de memoria por punteros

El visualizar las direcciones de memoria a través de punteros es útil ya que permite al programador tener una visión más clara de lo que se está almacenando en la memoria principal. El siguiente ejemplo brinda una alternativa para generar esta visualización:

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *ptr = arr; // ptr apunta al primer elemento del arreglo
    int size = sizeof(arr) / sizeof(arr[0]); // Calcula el número de elementos en el arreglo

    for(int i = 0; i < size; i++) {
        printf("Dirección de elemento %d: %p\n", i, (void*)(ptr + i));
        // Otra forma es usando: printf("Dirección de elemento %d: %p\n", i, (void*)&ptr[i]);
    }

    return 0;
}

Puntero a puntero

Un puntero a puntero es una variable que almacena la dirección de memoria de otro puntero. Se utiliza ** para declarar un puntero a puntero.

int var = 5;
int *ptr = &var;
int **pptr = &ptr;

Puntero y funciones

Los punteros pueden ser útiles para devolver múltiples valores de una función y para modificar los argumentos pasados a una función.

void sumaYResta(int a, int b, int *suma, int *resta) {
    *suma = a + b;
    *resta = a - b;
}

int main() {
    int s, r;
    sumaYResta(5, 3, &s, &r);
    printf("Suma: %d, Resta: %d", s, r);
    return 0;
}

Ejercicios

A continuación, se le invita a resolver la siguiente lista de ejercicios para un manejo apropiado de punteros.

Ejercicio 1

Escribir una función en C que intercambie los valores de dos variables enteras utilizando punteros.

Ejercicio 2

Crear una función que invierta un arreglo de enteros. La función debe aceptar dos argumentos, el arreglo y su tamaño, y debes usar punteros para acceder y modificar el arreglo.

Ejercicio 3

Crear una función que calcule la suma de los elementos de un arreglo de enteros. La función debe aceptar el arreglo y su tamaño como argumentos, utilizando punteros para iterar a través del arreglo.

Ejercicio 4

Desarrollar una función que encuentre el valor máximo en un arreglo de enteros. La función debe devolver el valor máximo utilizando el concepto de punteros para acceder a los elementos del arreglo.

⚠️ **GitHub.com Fallback** ⚠️