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

Punteros en C: Guía completa sobre tipos, uso y mejores prácticas

¿Qué es un puntero en C?

Un puntero es una variable que almacena la dirección de memoria de otra variable. Al referenciar la dirección, un puntero puede acceder o modificar indirectamente los datos a los que apunta. Esta indirección permite un uso eficiente de memoria y ejecución rápida, especialmente al tratar con grandes estructuras de datos o asignación dinámica de memoria.

Cómo usar punteros en C

Considera una variable entera v:

int v = 0;
Su valor es 0, pero cada variable también tiene una dirección única. Puedes recuperar esta dirección con el operador de dirección (&):
printf("Dirección de v: %p\n", (void*)&v);
La dirección impresa se verá como un número hexadecimal aleatorio y puede diferir en cada ejecución.

A continuación se muestra un programa simple que demuestra cómo un puntero almacena una dirección:

#include <stdio.h> int main() { int v = 0; int *y = &v; // y contiene la dirección de v printf("Dirección almacenada en y: %p\n", (void*)y); printf("Valor apuntado por y: %d\n", *y); return 0; }

Salida típica:

Dirección almacenada en y: 0x7ffeefbff5c8 Valor apuntado por y: 0

Declaración de un puntero

Las declaraciones de punteros siguen el patrón:

tipo_dato *nombre_puntero;
Donde tipo_dato es el tipo de datos al que referencia el puntero. Ejemplos válidos incluyen:

int *ptr_int; // puntero a int double *ptr_double; // puntero a double char *ptr_char; // puntero a char 

Inicialización de un puntero

Después de la declaración, un puntero debe inicializarse con una dirección válida. Usar un puntero sin inicializar conduce a comportamiento indefinido. Sintaxis de inicialización:

puntero = &variable;
Ejemplo:
#include <stdio.h> int main() { int a = 10; int *p = &a; printf("Dirección en p: %p\n", (void*)p); printf("Valor a través de p: %d\n", *p); return 0; }

Tipos de punteros en C

Acceso directo vs. indirecto

El acceso directo usa el nombre de la variable directamente; el acceso indirecto usa un puntero. Ejemplo:

#include <stdio.h> int var = 1; int *ptr = &var; printf("Directo: %d\n", var); // 1 printf("Indirecto: %d\n", *ptr); // 1 *ptr = 48; // modificar vía puntero printf("Después del cambio, indirecto: %d\n", *ptr); // 48 

Aritmética de punteros

Cuando un puntero apunta a un elemento de array, sumar o restar un entero mueve el puntero por esa cantidad de elementos, no bytes. Ejemplo:

int arr[5] = {1,2,3,4,5}; int *p = arr; // apunta a arr[0] for (int i = 0; i < 5; ++i) { printf("%d\n", *p); ++p; // mover al siguiente elemento } 

Reglas clave:

Punteros con arrays

Los punteros proporcionan una forma concisa de iterar sobre elementos de array:

int a[5] = {1,2,3,4,5}; int *p = a; // mismo que &a[0] for (int i = 0; i < 5; ++i) { printf("%d\n", *p++); // imprime 1 a 5 } 

Punteros y cadenas

Una cadena es un array de char terminado por un carácter nulo. La manipulación de punteros hace trivial el recorrido de cadenas:

#include <stdio.h> #include <string.h> int main() { char str[] = "Hola Guru99!"; char *p = str; printf("Primer carácter: %c\n", *p); ++p; printf("Siguiente carácter: %c\n", *p); // Imprimir cadena completa for (int i = 0; i < strlen(str); ++i) { printf("%c\n", *p++); } return 0; } 

Ventajas de los punteros

Posibles trampas

Conclusiones clave

Lenguaje C

  1. Entendiendo la Impresión 3D: Principios, Tipos y Aplicaciones Clave
  2. Soldadura explicada: Definición, tipos y aplicaciones
  3. Fundición Explicada: Definición y Tipos de Procesos de Fabricación
  4. Domine variables y tipos de datos primitivos en C#: Guía completa
  5. Cuatro patrones probados para funciones definidas por el usuario en C
  6. Dominando punteros en C: Tutorial práctico guiado por expertos
  7. Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
  8. Dominando punteros en C: Pasos prácticos para programación avanzada
  9. Tipos de Variables en C++ Explicados: Memoria, Límites y Operaciones
  10. Tipos de variables en Python: Entendiendo y usando tipos de datos
  11. Entendiendo los Tipos de Variables en Java: Guía Completa