Icono del sitio AranaCorp

Un vistazo rápido al puntero en C

,

El puntero en el lenguaje C es una herramienta muy poderosa para realizar ciertas tareas. Es un concepto que necesitas comprender si quieres mejorar tus habilidades en C. Algunos algoritmos serán más complicados o incluso imposibles de escribir sin el uso de punteros.

Introducción

En un programa, cualquier elemento definido (variables, objetos, funciones, etc.) se almacena en memoria en una dirección determinada. Para encontrar este elemento, basta con conocer la dirección de memoria utilizada por el elemento, o la primera dirección utilizada si la variable ocupa varias zonas de memoria.

Un puntero es una variable que contiene la dirección de memoria de otra variable (u objeto). Aunque el valor de un puntero es siempre un número entero, su tipo depende del objeto al que apunte.

Declarar un puntero

El tipo del puntero debe ser idéntico al tipo de la variable a la que se dirige.

<type> * <pointer_name> //o <type> *<pointer_name>

Ex:

float myfloat
float * myfloataddress;
int myint
int * myintaddress;

Por tanto, podemos inicializar la variable y su dirección en la misma línea

int i,*pi;

Operación con punteros

La dirección de una variable es un número entero. Por lo tanto, es posible sumar y restar un entero a una dirección para obtener un puntero del mismo tipo a una dirección diferente.

ptr+i –>dirección contenida en ptr + i * tamaño del tipo ptr

También se pueden restar dos direcciones que apunten al mismo tipo. La resta es útil, por ejemplo, cuando los dos punteros apuntan a la misma matriz para averiguar el número de elementos entre los dos elementos apuntados.

ptr1-ptr2 -> (dirección apuntada por ptr1 – dirección apuntada por ptr2)/( tipo tamaño de ptr1 y ptr2)

También es posible comparar valores de direcciones utilizando los operadores <,>,<=,>=,!= y ==.

Modificación del valor de una variable mediante un puntero

En el siguiente ejemplo, x es una variable entera y p es un puntero entero que contiene la dirección de la variable x. El valor de x inicializado en 3 se cambia a 21 utilizando el puntero. El valor de x, inicializado en 3, se cambia a 21 utilizando el puntero.

int x=3;
int * p=&amp;amp;x;

*p=21; // is equivalent to x=21;
printf("valeur de *p = %d\n",*p); // equivalent to printf("valeur de x = %d\n",x);

Modificación de una variable en la entrada de una función

En C, una función sólo puede devolver una única variable. Para devolver varios valores, es posible utilizar los punteros de estas variables de entrada en lugar de devolver los propios valores.

#include <iostream>

int myparam=5;
struct mystruct_T{
  int val1;
  int val2;
}STRUCT;

void change_struct( mystruct_T * mystruct, int * param) {
   mystruct-&gt;val1=10;
   *param=26;
}

int main(){
    change_struct(&amp;STRUCT, &amp;myparam);
    
    printf("Struct.val1 : %d",STRUCT.val1);
    printf("param : %d",myparam);
}

Con este método, es posible modificar varias variables como si la función devolviera varios valores.

Breve resumen

Fuentes

Salir de la versión móvil