Matrices y Punteros

• Matrices y Punteros

Asumiendo que los elementos de una matriz se almacenan de forma contigua y que z es el tamaño en bytes de un elemento tipoX, el desplazamiento d en bytes respecto del comienzo, del elemento a[i] de una matriz tipoX a[n];, viene determinado por:
Desplazamiento (en bytes) d = posición i • tamaño del elemento z
Siendo el tamaño del elemento: z = sizeof(tipoX).
Nota: recuerde que i tiene el valor 0 para el primer elemento.
Por definición, excepto cuando es operando de los operadores de referencia & o sizeof, el identificador de una matriz es considerado un puntero a su primer elemento. Esto tiene importantes implicaciones prácticas, y es el secreto para comprender la mecánica de matrices; de punteros, y de las cadenas de caracteres en C++ (un tipo especial de matrices). Por ejemplo, cuando una matriz es pasada como argumento a una función, el identificador es considerado como un puntero al primer elemento, así que coloquialmente suele decirse: “las matrices se pasan por referencia”; por supuesto, dentro de la función llamada, el argumento aparece como una variable local tipo puntero.
Si m es una matriz de elementos tipoX y pm un puntero-a-tipoX, la asignación
pm = &m[0]; puede también ser expresada como pm = m;, o lo que es lo mismo, para la mayoría de los casos prácticos se puede establecer que:
pm == &m[0] == m
Es decir:
m == &m[0] ↔ *m == m[0]
En el siguiente ejemplo se muestra como el nombre de la matriz puede ser tomado directamente como sinónimo de puntero al primer elemento.
int a[5] = {1,2,3,4,5};
printf(“Posicion 0 = %1i\n”, *a);
printf(“Posicion 3 = %1i\n”, *(a+3));
salida:
Posicion 0 = 1
Posicion 3 = 4

Leave your vote

0 points
Upvote Downvote

Total votes: 0

Upvotes: 0

Upvotes percentage: 0.000000%

Downvotes: 0

Downvotes percentage: 0.000000%

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *