Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

C - Punteros

Los punteros en C son fáciles y divertidos de aprender. Algunas tareas de programación en C se realizan más fácilmente con punteros y otras tareas, como la asignación de memoria dinámica, no se pueden realizar sin utilizar punteros. Entonces se vuelve necesario aprender punteros para convertirse en un perfecto programador de C. Comencemos a aprenderlos en pasos simples y fáciles.

Como sabe, cada variable es una ubicación de memoria y cada ubicación de memoria tiene su dirección definida a la que se puede acceder mediante el operador ampersand (&), que denota una dirección en la memoria. Considere el siguiente ejemplo, que imprime la dirección de las variables definidas −

Demostración en vivo
#include <stdio.h>

int main () {

   int  var1;
   char var2[10];

   printf("Address of var1 variable: %x\n", &var1  );
   printf("Address of var2 variable: %x\n", &var2  );

   return 0;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

¿Qué son los punteros?

Un puntero es una variable cuyo valor es la dirección de otra variable, es decir, la dirección directa de la ubicación de memoria. Como cualquier variable o constante, debe declarar un puntero antes de usarlo para almacenar cualquier dirección de variable. La forma general de una declaración de variable apuntadora es −

type *var-name;

Aquí, escriba es el tipo base del puntero; debe ser un tipo de datos C válido y var-name es el nombre de la variable de puntero. El asterisco * que se usa para declarar un puntero es el mismo asterisco que se usa para la multiplicación. Sin embargo, en esta sentencia se utiliza el asterisco para designar una variable como puntero. Eche un vistazo a algunas de las declaraciones de puntero válidas −

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

El tipo de datos real del valor de todos los punteros, ya sean enteros, flotantes, de carácter o de otro tipo, es el mismo, un número hexadecimal largo que representa una dirección de memoria. La única diferencia entre punteros de diferentes tipos de datos es el tipo de datos de la variable o constante a la que apunta el puntero.

¿Cómo utilizar punteros?

Hay algunas operaciones importantes, que haremos con la ayuda de punteros con mucha frecuencia. (a) Definimos una variable puntero, (b) asignar la dirección de una variable a un puntero y (c) finalmente acceda al valor en la dirección disponible en la variable de puntero. Esto se hace usando el operador unario * que devuelve el valor de la variable ubicada en la dirección especificada por su operando. El siguiente ejemplo hace uso de estas operaciones −

Demostración en vivo
#include <stdio.h>

int main () {

   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* pointer variable declaration */

   ip = &var;  /* store address of var in pointer variable*/

   printf("Address of var variable: %x\n", &var  );

   /* address stored in pointer variable */
   printf("Address stored in ip variable: %x\n", ip );

   /* access the value using the pointer */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

Puntero NULL

Siempre es una buena práctica asignar un valor NULL a una variable de puntero en caso de que no tenga una dirección exacta para asignar. Esto se hace en el momento de la declaración de la variable. Un puntero al que se le asigna NULL se denomina null puntero.

El puntero NULL es una constante con un valor de cero definido en varias bibliotecas estándar. Considere el siguiente programa −

Demostración en vivo
#include <stdio.h>

int main () {

   int  *ptr = NULL;

   printf("The value of ptr is : %x\n", ptr  );
 
   return 0;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

The value of ptr is 0

En la mayoría de los sistemas operativos, los programas no pueden acceder a la memoria en la dirección 0 porque esa memoria está reservada por el sistema operativo. Sin embargo, la dirección de memoria 0 tiene un significado especial; indica que el puntero no apunta a una ubicación de memoria accesible. Pero por convención, si un puntero contiene el valor nulo (cero), se supone que no apunta a nada.

Para verificar un puntero nulo, puede usar una declaración 'si' de la siguiente manera:

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

Puntos en detalle

Los punteros tienen conceptos muchos pero sencillos y son muy importantes para la programación en C. Los siguientes conceptos de puntero importantes deben ser claros para cualquier programador de C:

Sr.No. Concepto y descripción
1 Aritmética de punteros

Hay cuatro operadores aritméticos que se pueden usar en punteros:++, --, +, -

2 Matriz de punteros

Puede definir matrices para contener varios punteros.

3 Puntero a puntero

C le permite tener un puntero sobre un puntero y así sucesivamente.

4 Pasar punteros a funciones en C

Pasar un argumento por referencia o por dirección permite cambiar el argumento pasado en la función de llamada por la función llamada.

5 Puntero de retorno de funciones en C

C permite que una función devuelva un puntero a la variable local, a la variable estática y también a la memoria asignada dinámicamente.


Lenguaje C

  1. C Variables, constantes y literales
  2. Clase de almacenamiento C
  3. Punteros C
  4. Relación entre matrices y punteros
  5. Direcciones y punteros de C Pass
  6. Estructuras C y punteros
  7. Palabra clave global de Python
  8. Punteros de C++ con ejemplos
  9. C Variable, tipos de datos, constantes
  10. Punteros en C:¿Qué es un puntero en la programación C? Tipos
  11. Asignaciones de Verilog