2012-04-15 16 views

Respuesta

6

La respuesta simple es que no se puede. Una matriz bidimensional es un bloque contiguo de memoria que contiene cada línea, mientras que un puntero a puntero puede hacer referencia a una ubicación de memoria donde se encuentra un puntero a una ubicación de memoria diferente que contiene los enteros.

Puede, por otro lado, crear una estructura de datos separada que mantenga los punteros a los elementos de la manera que desee (es decir, crear una matriz de punteros, inicializarlos al principio de cada fila y usar un puntero a esa matriz de punteros como pointer), pero no es útil en absoluto, sino que lo complicará todo innecesariamente.

La pregunta probablemente proviene de los conceptos erróneos comunes de que las matrices y los punteros son mismos, que no lo son. Una matriz puede decaer a un puntero al primer elemento de la matriz (y lo hará con bastante frecuencia), pero el tipo de ese puntero es el tipo del primer elemento. En una matriz bidimensional, el tipo del primer elemento es la matriz interna, no el tipo de elemento básico.

+0

ok muchas gracias, sé que la matriz en sí es un puntero por ejemplo arr [2] puede tratarlo como * arr * (arr + 1) = 3 ¿cómo puedo hacer lo mismo pero con una matriz bidimensional? arr [3] [2], ¿puedo decir ** arr = 0 etc ... –

+0

@AhmedZainElDein: NO, usted está equivocado y es un error común. La matriz es ** no ** un puntero al primer elemento, son tipos completamente diferentes, incluso si hay una conversión implícita de una matriz a un puntero al primer elemento. Una vez que entiendas realmente que * no * son lo mismo, será más fácil entender por qué lo que estás pidiendo no se puede hacer. Otra forma de verlo es dibujar el diseño de memoria de la matriz bidimensional (bloque único de tamaño N * M elementos) y luego darse cuenta de que no hay ningún puntero dentro de ese bloque, por lo que no puede crear un puntero –

+0

gracias por iluminar yo .estoy más inclinado a lo que estás diciendo porque no puedo encontrar lejos para hacer referencia ** arr a arr [3] [2] en absoluto pero eso me hace preguntarme qué en una matriz dimensional funciona int arr [2], puedo decir * arr = 0; * (arr + 1) = 3 –

16

declarar el puntero de la siguiente manera:

int (*pointer)[3] = array; 

Pero esto es infinitamente desagradable en C++. Tal vez podrías encontrar una mejor solución (una que involucre vectores y otras cosas) si explicaras cuál es tu propósito general.

+0

De acuerdo. STL te ahorrará muchos dolores de cabeza. – chris

+0

esto no es lo que quiero en ll, este es un arreglo unidimensional gracias por su esfuerzo –

+0

@AhmedZainElDein: lo que quiere no se puede hacer, y este es un enfoque para proporcionar algo que sea * fuente * compatible con lo que *querer*. –

Cuestiones relacionadas