Relación entre matrices y punteros en la programación en C (con ejemplos)

En este tutorial, aprenderá sobre la relación entre matrices y punteros en la programación en C. También aprenderá a acceder a los elementos de la matriz mediante punteros.

Antes de aprender sobre la relación entre matrices y punteros, asegúrese de consultar estos dos temas:

  • Matrices C
  • Punteros C

Relación entre matrices y punteros

Una matriz es un bloque de datos secuenciales. Escribamos un programa para imprimir direcciones de elementos de matriz.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Salida

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Dirección de la matriz x: 1450734448 

Hay una diferencia de 4 bytes entre dos elementos consecutivos de la matriz x. Es porque el tamaño de intes de 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 de la matriz.

Del ejemplo anterior, está claro que &x(0)es equivalente ax. Y x(0)es equivalente a *x.

Similar,

  • &x(1)es equivalente a x+1y x(1)es equivalente a *(x+1).
  • &x(2)es equivalente a x+2y x(2)es equivalente a *(x+2).
  • Básicamente, &x(i)es equivalente a x+i, y x(i)es equivalente a *(x+i).

Ejemplo 1: punteros y matrices

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Cuando ejecute el programa, la salida será:

 Ingrese 6 números: 2 3 4 4 12 4 Suma = 29 

Aquí, hemos declarado una matriz x de 6 elementos. Para acceder a elementos de la matriz, hemos utilizado punteros.

En la mayoría de los contextos, los nombres de las matrices se convierten en punteros. En palabras simples, los nombres de las matrices se convierten en punteros. Esa es la razón por la que puede usar punteros para acceder a elementos de matrices. Sin embargo, debe recordar que los punteros y las matrices no son lo mismo .

Hay algunos casos en los que los nombres de las matrices no se convierten en punteros. Para obtener más información, visite: ¿Cuándo el nombre de la matriz no se descompone en un puntero?

Ejemplo 2: matrices y punteros

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(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 lo tanto, 3se mostró cuando imprimimos *ptr.

Y la impresión *(ptr+1)nos da el cuarto elemento. Del mismo modo, la impresión *(ptr-1)nos da el segundo elemento.

Articulos interesantes...