¿Cómo construir una matriz de punteros en la programación c

Una matriz de punteros sería una matriz que tiene posiciones de memoria. Tal construcción es a menudo necesario en el lenguaje de programación C. Recuerde que una matriz de punteros es realmente una matriz de cadenas, se muestra en Loco Pointer matrices. Eso hace que el tema de digestión más fácil.

ARRAYS LOCO PUNTERO

#include int main () {char * fruta [] = {"sandía", "banana", "pera", "manzana", "coco", "uva", "blueberry"} - int x-for (x = 0-xlt; 7-x ++) puts (fruta [x]) - retorno (0) -}

Una matriz de punteros se declara en Loco Pointer matrices. Funciona de manera similar a una matriz de cadenas, aunque en esta construcción no es necesario contar específicamente longitudes de cuerdas individuales. Eso es porque la matriz es realmente una matriz de punteros, o posiciones de memoria. Cada cadena habita en algún lugar de la memoria. La matriz se limita a enumerar donde comienza cada una.

Ejercicio 1: Escriba el código fuente de locos Pointer matrices en su editor. Genere y ejecute confirmar que funciona.

¿Qué parte de Arrays Loco Pointer cree usted que se podría mejorar?

Ejercicio 2: Utilizando la información a continuación como guía, sustituya la notación de array en línea 17 en Loco Pointer matrices con la notación puntero.

Matriz alfa []Puntero la
alfa [0]*la
alfa [1]* (a + 1)
alfa [2]* (a + 2)
alfa [3]* (a + 3)
alfa [n]* (a +n)

La razón de que su solución al Ejercicio 2 obras (suponiendo que usted lo consiguió correcto) es que la matriz de la fruta contiene punteros. El valor de cada elemento es otro puntero. Pero eso es nada- considerar punteros-a-Punteros Ejemplo.

PUNTEROS-TO-PUNTEROS Ejemplo

#include int main () {char * fruta [] = {"sandía", "banana", "pera", "manzana", "coco", "uva", "blueberry"} - int x-for (x = 0-xlt; 7-x ++) {putchar (** (fruta + x)) - putchar (' n') -} return (0) -}

Línea 18 de punteros-a-Punteros Ejemplo contiene los temida, temido, evitado, y maldito ** notación, o doble puntero notación.

Ejercicio 3: Escribir con cuidado el código fuente de punteros-a-Punteros Ejemplo en su editor. Compila y ejecuta.

Para entender la ** (fruta + x) construir, debe trabajar de adentro hacia afuera:

fruta + x

Variable fruta contiene una dirección de memoria. Es un puntero! La x es un valor de incremento en una unidad. En este caso, la unidad es una dirección porque todos los elementos de la fruta array son punteros.

* (fruta + x)

Usted ha visto la construcción anterior ya. Es el contenido de la dirección de la fruta + x. A partir del código, fruta es una matriz de punteros. Así, el resultado de la operación anterior es. . . un puntero!

** (fruta + x)

Por último, se obtiene un puntero a un puntero o - poner mejor - un peeker a un peeker. Si el peeker interior es una dirección de memoria, la peeker exterior (el primer asterisco) es el contenido de esa dirección de memoria.

imagen0.jpg

Es útil recordar que el operador ** es casi siempre (pero no exclusivamente) ligada a una serie de pointers- o, si se quiere que sea sencillo, para una matriz de cadenas. La primera columna es la dirección de una matriz de punteros, la segunda columna es el puntero en sí (una cadena), y la columna de la derecha es el primer carácter de la cadena.

Si usted todavía está confundido, considere darle vueltas a la notación de puntero y la notación de array:

Puntero notaciónNotación de matrizDescripción
** ptr* array []Declara una matriz de punteros.
* ptrarray [0]La dirección del primer puntero en la array- para un stringarray, la primera cadena.
* (ptr + 0)array [0]Lo mismo que la entrada anterior.
** ptrarray [0] [0]El primer elemento de la primera puntero en la array- la firstcharacter de la primera cadena de la matriz.
** (ptr + 1)array [1] [0]El primer elemento de la segunda puntero en la array- la firstcharacter de la segunda cadena.
* (* (ptr + 1))array [1] [0]Lo mismo que la entrada anterior.
* (* (ptr + a) + b)arreglo [a] [b]Elemento b del puntero la.
** (ptr + a) + barreglo [a] [0] + bEste artículo no es realmente lo que quieres. Lo que esto itemrepresents es el valor de elemento de 0 a puntero la además thevalue de la variable b. Utilice el * (* (ptr + a) + b) notationinstead.

En la tabla, la notación de puntero (variable usando ptr) Se compara con la notación de matriz equivalente (variable usando array).

Ejercicio 4: Reelaborar el código fuente del Ejercicio 3 para que se muestre cada personaje individual en una cadena, una a la vez, utilizando la función putchar (). Si usted puede escribir la operación entera putchar () como la condición de un bucle while, que realmente entiende el material.




» » » » ¿Cómo construir una matriz de punteros en la programación c