7

Que son los punteros y como aprender sobre ellos, sin morir en el intento

Jose Antonio
ZeroBit
26218

IMPORTANTE Entender el siguiente concepto:

  • printf("%d\n",); --> Mostrara el valor entero de la direccion
  • printf("%u\n", point); --> Mostrara el valor entero de la direccion sin simbolos, es decir sin ser negativo ni positivo, simplemente el numero
  • printf("%p\n", point); --> Mostrara el valor hexadecimal del puntero

Organización de la memoria: La memoria se organiza en forma de celdas, por medio de Bytes, como por ejemplo podemos tener una representación, donde cada cerda representa un Byte, lo cual dentro de ella son 8 bits.

–> Esto lo que significa es que dentro de una celda podemos guardar un valor numérico como máximo de 255, y si queremos guardar un valor numérico mas grande tendremos que utilizar otro Byte. Consecuentemente cada vez que tengamos que agregar un valor numérico mas grande vamos a estar necesitando abarcar mas celdas, para almacenar su valor.

Direcciones de memoria: Son predefinidas, con notación hexadecimal, lo que quiere decir que son cantidades tan grandes que se necesita utilizarlo.

–> Entonces cuando estamos asignando una variable, lo que realmente estamos es asignando un nombre, un nombre que es mas facil de recordar que una dirección hexadecimal y su valor es el que se encontrara dentro de la celda.

Punteros: Su función es buscar un espacio de memoria donde están las variables, puesto que si buscamos o intentamos ingresar a una variable equivocada o que siquiera existe vamos a tener error en el código, los punteros solamente pueden manejar espacio de memoria lo que quiere decir que no manejaran otro tipo de variable.

–> Lo que quiere decir que al momento de crear una variable de tipo puntero, su contenido sera únicamente la dirección de la variable asignada.

–> Una de las formas de encontrar la dirección en memoria de una variable es de la siguiente forma:

* &+ la variable --> &x

–> Esto lo podemos escribir en un prinft, dentro de ella de la siguiente forma:

#include <stdio.h> int main () { int x = 10, z; printf("El valor de x es: %d\n", x); printf("Su direccion es: %d\n", &x); return 0; }
IMPORTANTE lo tenemos que hacer con %, para que la dirección no salga con valores positivos o negativos, entonces quedaría así:

*printf(“Su dirección es: %u\n”, &x);

–> Entonces con esto, tenemos que la variable x se almacena en esa dirección de nuestra memoria del ordenador

Guardar dirección con puntero: Si queremos guardar la dirección de memoria donde se almacena la variable para ello lo tenemos que hacer con el puntero, para ello lo que tenemos que hacer es lo siguiente:

* int* --> declaramos el tipo de variable y le agregamos enseguida un * esto lo que indicara que es una variable de dirección de memoria.

	* int * + nombre de la variable "direct" = &x; 

–> entonces la variable direct de tipo dirección de memoria es la que va a encerrar la dirección de memoria de la variable X. Esto es lo que se le llama puntero

IMPORTANTE Funciona con cualquier otro tipo de variable puede ser variable de tipo float.

Uso del puntero: El principal uso que tienen los punteros en el lenguaje C, es trabajar con referencias en las funciones, lo que quiere decir, que cuando por ejemplo estamos pasando una variable a una función, lo que realmente le estamos pasando es una copia, por ejemplo tenemos el siguiente ejemplo de codigo:

#include <stdio.h> void jugar (int n) { n = n + 5; printf("vale: %d\n", n); } int main () { int x = 10; jugar(x); printf("valez: %d\n", x); }

–> Entonces una vez que termina la función esa copia muere, ya no tiene mas relevancia en el código puesto que las función se cumple cuando hasta que sea necesaria

IMPORTANTE Cuando trabajamos con puntero, trabajamos con direcciones en memoria y no con variables

Recuperar el valor de puntero: Para ello tenemos que declarar un * antes des de una variable, de forma que se recuperara la dirección de la variable:

* int y = *n;

–> Entonces, para cambiar el valor de la celda lo hacemos de la siguiente forma:

#include <stdio.h> void jugar (int* n) { int y = *n; y = y + 5 * 3 - 1; *n = y; //printf("direccion es: %u\n", y); } int main () { int x = 10; jugar(&x); printf("valez: %d\n", x); return 0; }

–> Entonces con esto lo que estamos haciendo, es cambiarle el valor a la dirección, que la dirección se guarda en *n, con la recuperación, es decir la sustituye, entonces ya no seria la anterior sino en este caso la dirección de x, seria el resultado de la ecuación.

**Resumen: ** Una forma mas practica de ver los punteros basicamente seria de la siguiente forma:

#include<stdio.h>int main ()
{
    int z;
    intpoint = &z;
    printf("%p\n", point);
    printf("%u\n", point);
    printf("%d\n", point);
    return0;
}

–> De esta forma declaramos que la variable point tendra el direccionamiento de la variable z, y estamos imprimiendo en pantalla, la direccion decimal, direccion sin simbolos y direccion de valor entero

Escribe tu comentario
+ 2
Ordenar por:
1
22597Puntos

Tenga su like, buen hombre.