Si sta tentando di assegnare una variabile a doppio puntatore a un array ... questo è stato coperto esaustivamente, vedere here per informazioni su questo. Inoltre, dal momento che hai dichiarato
int arr[2][2] = ...;
e poi tenta di assegnare arr
ad un doppio puntatore
int ** ptr = ... ;
che è garantito a non funzionare, quindi un errore di segmentazione.Inoltre, tale affermazione int ** ptr=(int**) arr;
è in realtà cast in un tipo (ad esempio [] []) in un altro tipo (ad esempio **) nonostante siano di tipo "int". Sono entrambi diversi e il compilatore che interpreteranno in modo molto diverso ...
che si possa fare in questo modo:
int *ptr = &arr;
Ora *(ptr + 1)
farà riferimento alla riga di indice 0, *(ptr + 2)
farà riferimento al 1 'st row e così via. L'unico onere su di te è non oltrepassare i marker di dove si può verificare arr
altrimenti può verificarsi un errore di segmentazione ...
penso che ci sia un grande regola in C++: "Se dovete lanciare, non te lo puoi permettere" http://blogs.msdn.com/b/oldnewthing/archive/2009/10/23/9911891.aspx – SergGr