Array-zu-Zeiger-Zerfall und Übergabe mehrdimensionaler Arrays an Funktionen

Ich weiß, dass ein Array zu einem Zeiger zerfällt, so dass, wenn man deklariert

char things[8];

und später verwendetthings irgendwo anders,things ist ein Zeiger auf das erste Element im Array.

Auch nach meinem Verständnis, wenn man das erklärt

char moreThings[8][8];

dannmoreThings istnicht vom Typ Zeiger auf Zeichen, aber vom Typ "Array von Zeigern auf Zeichen", da der Zerfall nur einmal auftritt.

WannmoreThings wird an eine Funktion übergeben (zB mit Prototyp)void doThings(char thingsGoHere[8][8]) Was ist eigentlich mit dem Stack los?

ObmoreThings ist nicht vom Zeigertyp, ist dies dann wirklich noch eine Referenzübergabe? Das habe ich wohl immer gedachtmoreThings stellte immer noch die Basisadresse des mehrdimensionalen Arrays dar. Was, wenndoThings nahm EingangthingsGoHere und selbst an eine andere Funktion übergeben?

Ist die Regel so ziemlich das, wenn man nicht einen Array-Eingang als spezifiziertconst Ist das Array dann immer veränderbar?

Ich weiß, dass die Typprüfung nur zur Kompilierungszeit stattfindet, aber ich bin immer noch verwirrt darüber, was technisch als Referenzübergabe gilt (dh nur, wenn Argumente des Typzeigers übergeben werden oder ein Array von Zeigern als Übergabe gelten würde). als Referenz auch?)

Es tut mir leid, dass ich mit dieser Frage ein bisschen durcheinander bin, aber aufgrund meiner Schwierigkeiten, dies zu verstehen, ist es schwierig, eine genaue Anfrage zu formulieren.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage