Array para puntero decaimiento y pasar matrices multidimensionales a funciones

Sé que una matriz se desintegra a un puntero, de modo que si se declara

char things[8];

y luego se usathings en algún otro lugar,things Es un puntero al primer elemento de la matriz.

También, desde mi entendimiento, si se declara.

char moreThings[8][8];

entoncesmoreThings esno de tipo puntero a char pero de tipo "matriz de punteros a char", porque el decaimiento solo ocurre una vez.

CuandomoreThings Se pasa a una función (digamos con prototipovoid doThings(char thingsGoHere[8][8]) ¿Qué está pasando realmente con la pila?

SimoreThings no es de tipo puntero, entonces ¿es esto realmente un paso por referencia? Supongo que siempre pensé quemoreThings Todavía representaba la dirección base de la matriz multidimensional. Y sidoThings tomó entradathingsGoHere ¿Y se lo pasó a otra función?

Es la regla más o menos que a menos que uno especifique una entrada de matriz comoconst ¿Entonces la matriz siempre será modificable?

Sé que el tipo de comprobación de tipos solo ocurre en tiempo de compilación, pero todavía estoy confundido acerca de lo que técnicamente cuenta como un paso por referencia (es decir, es solo cuando se pasan los argumentos del puntero de tipo, o si la matriz de punteros sería un paso). por referencia también?)

Lamento estar un poco por todas partes con esta pregunta, pero debido a mi dificultad para entender esto, es difícil articular una pregunta precisa.

Respuestas a la pregunta(3)

Su respuesta a la pregunta