Entendiendo la relación entre arrays y punteros en C
Relación entre arrays y punteros
En este tutorial, aprenderá sobre la relación entre arrays y punteros en programación C. También aprenderá a acceder a elementos de array usando punteros.
Antes de aprender sobre la relación entre arrays y punteros, asegúrese de revisar estos dos temas:
- Arrays en C
- Punteros en C
Relación entre arrays y punteros
Un array es un bloque de datos secuenciales. Escribamos un programa para imprimir las direcciones de los elementos de un array.
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf("&x[%d] = %p\n", i, &x[i]);
}
printf("Dirección del array x: %p", x);
return 0;
}
Salida
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Dirección del array x: 1450734448
Hay una diferencia de 4 bytes entre dos elementos consecutivos del array x. Es porque el tamaño de int es 4 bytes (en nuestro compilador).
Observe que la dirección de &x[0] y x es la misma. Es porque el nombre de la variable x apunta al primer elemento del array.

Del ejemplo anterior, queda claro que &x[0] es equivalente a x. Y x[0] es equivalente a *x.
De manera similar:
&x[1]es equivalente ax+1yx[1]es equivalente a*(x+1).&x[2]es equivalente ax+2yx[2]es equivalente a*(x+2).- ...
- Básicamente,
&x[i]es equivalente ax+iyx[i]es equivalente a*(x+i).
Ejemplo 1: Punteros y arrays
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf("Introduzca 6 números: ");
for(i = 0; i < 6; ++i) {
// Equivalente a scanf("%d", &x[i]);
scanf("%d", x+i);
// Equivalente a sum += x[i]
sum += *(x+i);
}
printf("Suma = %d", sum);
return 0;
}
Cuando ejecute el programa, la salida será:
Introduzca 6 números: 2 3 4 4 12 4 Suma = 29
Aquí, hemos declarado un array x de 6 elementos. Para acceder a los elementos del array, hemos usado punteros.
En la mayoría de los contextos, los nombres de array decaen a punteros. En palabras simples, los nombres de array se convierten en punteros. Esa es la razón por la que puede usar punteros para acceder a elementos de arrays. Sin embargo, debe recordar que punteros y arrays no son lo mismo.
Hay algunos casos donde los nombres de array no decaen a punteros. Para aprender más, visite: ¿Cuándo el nombre de array no decae en un puntero?
Ejemplo 2: Arrays y punteros
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr se asigna la dirección del tercer elemento
ptr = &x[2];
printf("*ptr = %d \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
printf("*(ptr-1) = %d", *(ptr-1)); // 2
return 0;
}
Cuando ejecute el programa, la salida será:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
En este ejemplo, &x[2], la dirección del tercer elemento, se asigna al puntero ptr. Por eso, se mostró 3 al imprimir *ptr.
E imprimir *(ptr+1) nos da el cuarto elemento. De manera similar, imprimir *(ptr-1) nos da el segundo elemento.
Lenguaje C
- Entendiendo el desequilibrio voltaje-corriente en motores eléctricos: causas y solución de problemas
- Mejorando la colaboración operaciones-mantenimiento para resultados de manufactura superiores
- Brazing vs. Soldadura Blanda: Diferencias Clave Explicadas
- Motor 2 Tiempos vs 4 Tiempos: Diferencias Clave Explicadas
- SCADA vs. HMI: Diferencias Clave y su Papel en la Industria 4.0
- Entendiendo Motores DC vs AC: Diferencias Clave y Guía de Compra
- Big Data y Cloud Computing: cómo trabajan juntos
- Cómo IoT y Edge Computing se complementan mutuamente
- Punteros y arrays en C++: dominando su relación
- Programación en C: Pasar direcciones y punteros a funciones – Guía práctica
- Dominando structs y punteros en C: Guía práctica