Está intentando asignar una variable de doble puntero a una matriz ... esto se ha cubierto exhaustivamente, consulte here para obtener información sobre esto. Además, puesto que declaró
int arr[2][2] = ...;
y luego intenta asignar arr
a un doble puntero
int ** ptr = ... ;
que está garantizado para no trabajar, por lo tanto, un fallo de segmentación.Además, esa instrucción int ** ptr=(int**) arr;
es realmente fundición un tipo (es decir [] []) a otro tipo (es decir **) a pesar de que son de tipo 'int'. Ambos son diferentes y el compilador que interpretarán de manera muy diferente ...
Usted puede hacerlo de esta manera:
int *ptr = &arr;
Ahora *(ptr + 1)
se referirá a la fila de orden 0, *(ptr + 2)
se referirá al 1 'primera fila y así sucesivamente. La única responsabilidad es no sobrepasar los marcadores de donde se usa arr
; de lo contrario, puede producirse un desbordamiento o incluso un error de segmentación ...
Creo que hay una gran regla en C++: "Si se tienen que desechar, no se puede permitir" http://blogs.msdn.com/b/oldnewthing/archive/2009/10/23/9911891.aspx – SergGr