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

Dominando punteros en C: Pasos prácticos para programación avanzada

Los punteros en C son fáciles y divertidos de aprender. Algunas tareas se realizan más fácilmente con punteros, y otras, como la asignación dinámica de memoria, no pueden hacerse sin ellos. Es necesario aprender punteros para ser un programador C competente. Empecemos con pasos simples.

Como sabes, cada variable es una ubicación de memoria y cada ubicación tiene su dirección accesible con el operador ampersand (&), que denota una dirección en memoria. Ejemplo que imprime direcciones:

Demo en vivo
#include <stdio.h>
int main() {
    int var1;
    char var2[10];
    printf("Dirección de var1: %x\n", &var1);
    printf("Dirección de var2: %x\n", &var2);
    return 0;
}

Resultado típico:

Dirección de var1: bff5a400
Dirección de var2: bff5a3f6

¿Qué son los punteros?

Un puntero es una variable cuyo valor es la dirección de otra variable, es decir, dirección directa de la ubicación de memoria. Como cualquier variable, debes declararlo antes de usarlo. Forma general:

tipo *nombre_var;

tipo es el tipo base del puntero (tipo de dato C válido) y nombre_var el nombre del puntero. El asterisco * designa variable como puntero (mismo símbolo que multiplicación, pero aquí indica puntero). Declaraciones válidas:

int *ip;    /* puntero a entero */
double *dp; /* puntero a double */
float *fp;  /* puntero a float */
char *ch;   /* puntero a carácter */

El tipo de dato real del valor de todos los punteros es el mismo: un número hexadecimal largo que representa una dirección de memoria. La única diferencia entre punteros de distintos tipos es el tipo de dato de la variable a la que apuntan.

Cómo usar punteros

Operaciones frecuentes con punteros: (a) definir variable puntero, (b) asignar dirección de una variable al puntero, (c) acceder al valor en la dirección almacenada usando operador unario * (desreferencia). Ejemplo:

Demo en vivo
#include <stdio.h>
int main() {
    int var = 20;      /* variable real */
    int *ip;           /* declaración puntero */
    ip = &var;         /* almacena dirección de var en puntero */
    printf("Dirección de var: %x\n", &var);
    printf("Dirección en ip: %x\n", ip);
    printf("Valor de *ip: %d\n", *ip);
    return 0;
}

Resultado:

Dirección de var: bffd8b3c
Dirección en ip: bffd8b3c
Valor de *ip: 20

Punteros NULL

Buena práctica: asignar NULL a un puntero si no tienes dirección exacta. Se hace en la declaración. Un puntero con NULL se llama puntero nulo.

NULL es constante con valor cero definida en librerías estándar. Ejemplo:

Demo en vivo
#include <stdio.h>
int main() {
    int *ptr = NULL;
    printf("Valor de ptr: %x\n", ptr);
    return 0;
}

Resultado:

Valor de ptr: 0

En la mayoría de SO, los programas no pueden acceder a memoria en dirección 0 (reservada por el SO). Pero por convención, si un puntero contiene NULL (cero), se asume que no apunta a ubicación accesible.

Para comprobar puntero nulo:

if(ptr)    /* true si p no es null */
if(!ptr)   /* true si p es null */

Punteros en detalle

Conceptos importantes que todo programador C debe dominar:

NºConcepto y Descripción
1Aritmética de punteros: cuatro operadores: ++, --, +, -
2Arrays de punteros: definir arrays que contengan múltiples punteros.
3Puntero a puntero: C permite puntero sobre puntero, etc.
4Pasar punteros a funciones: pasar argumento por referencia/dirección permite que la función llamada modifique el argumento en la función llamadora.
5Retornar puntero desde funciones: C permite retornar puntero a variable local, estática o memoria dinámica.

Lenguaje C

  1. Variables, constantes y literales en C: guía completa
  2. Entendiendo las clases de almacenamiento en C: ámbito, vida y rendimiento
  3. Dominando punteros en C: Tutorial práctico guiado por expertos
  4. Entendiendo la relación entre arrays y punteros en C
  5. Programación en C: Pasar direcciones y punteros a funciones – Guía práctica
  6. Dominando structs y punteros en C: Guía práctica
  7. Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
  8. Variables, tipos de datos y constantes en C – Guía práctica
  9. Punteros en C: Guía completa sobre tipos, uso y mejores prácticas
  10. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  11. Dominando la palabra clave global en Python: Cómo y cuándo usarla