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

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:


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.

Entendiendo la relación entre arrays y punteros en C

Del ejemplo anterior, queda claro que &x[0] es equivalente a x. Y x[0] es equivalente a *x.

De manera similar:


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

  1. Entendiendo el desequilibrio voltaje-corriente en motores eléctricos: causas y solución de problemas
  2. Mejorando la colaboración operaciones-mantenimiento para resultados de manufactura superiores
  3. Brazing vs. Soldadura Blanda: Diferencias Clave Explicadas
  4. Motor 2 Tiempos vs 4 Tiempos: Diferencias Clave Explicadas
  5. SCADA vs. HMI: Diferencias Clave y su Papel en la Industria 4.0
  6. Entendiendo Motores DC vs AC: Diferencias Clave y Guía de Compra
  7. Big Data y Cloud Computing: cómo trabajan juntos
  8. Cómo IoT y Edge Computing se complementan mutuamente
  9. Punteros y arrays en C++: dominando su relación
  10. Programación en C: Pasar direcciones y punteros a funciones – Guía práctica
  11. Dominando structs y punteros en C: Guía práctica