Una matriz de punteros es un tipo de datos de matriz estándar que contiene una secuencia de memoria dirigida a tipos de datos en lugar de contener otros tipos escalares, como números enteros o de punto flotante. Al usar una matriz de punteros, un programa puede tener una matriz de casi cualquier tipo de datos, estructura de datos, clase o incluso función. También es posible una clasificación eficaz de una serie de punteros de modo que, si se desea, las direcciones se puedan alinear de acuerdo con su ubicación física en la memoria del ordenador. Algunas de las complicaciones del uso de una serie de punteros son que los datos pueden corromperse fácilmente y que el tipo de datos al que se apunta debe administrarse internamente para evitar problemas de desbordamiento de memoria.
No todos los lenguajes de programación permiten una serie de punteros como se concibió originalmente el concepto. Los lenguajes de alto nivel que automatizan la gestión de la memoria no utilizan punteros de la misma forma que los lenguajes de nivel inferior, aunque técnicamente una matriz de objetos de clase en un lenguaje de alto nivel orientado a objetos es una matriz de punteros; aun así, no se pueden utilizar ni manipular de la misma forma. En un lenguaje de bajo nivel, la matriz realmente contendrá un valor entero que es la dirección directa del puntero en el montón de memoria. En la mayoría de los lenguajes de alto nivel, esta funcionalidad no es posible, aunque existen paradigmas alternativos.
Uno de los aspectos que hace que una serie de punteros sea valiosa como herramienta de programación es que los punteros pueden hacer referencia a cualquier tipo de datos disponibles. El puntero es un tipo de datos en sí mismo, aunque su único propósito es apuntar hacia otro tipo de datos. Esto significa que una matriz de punteros puede contener una variedad de tipos de datos en la misma matriz, aunque el programa necesitaría tener un mecanismo para realizar un seguimiento de lo que cada puntero hacía referencia.
Un aspecto poderoso de los punteros es que en realidad pueden apuntar a un código de programa compilado en la memoria. Esto permite que una matriz apunte a funciones, no solo a datos. Una serie de funciones puede permitir la referencia numérica dinámica de código. Esto puede ser útil cuando se programa un intérprete de lenguaje u otro tipo de software que necesita llamar a ciertas funciones basadas en una entrada impredecible sin la necesidad de declaraciones condicionales grandes como bloques de interruptores.
Algunos de los problemas que presenta una matriz de datos de puntero son la posibilidad de perder la dirección, evitando que esa memoria se libere más tarde, y la posibilidad de que una dirección se corrompa a través de una operación no intencional como la adición. Los intentos de acceder a una dirección incorrecta podrían provocar la lectura de datos corruptos o, en casos extremos, como una inicialización fallida, una falla de segmentación que podría hacer que el programa finalice inesperadamente. La programación cuidadosa puede ayudar a mitigar la posibilidad de estos eventos.