Я знаю, что массив распадается на указатель, так что если объявить
char things[8];
а затем при использовании things
где-то еще, things
является указателем на первый элемент в массиве.
Кроме того, из моего понимания, если объявить
char moreThings[8][8];
тогда moreThings
не имеет указателя на тип char, а типа "массив указателей на char", потому что распад происходит только один раз.
Когда moreThings
передается функции (скажем, с прототипом void doThings(char thingsGoHere[8][8])
, что на самом деле происходит со стеком?
Если moreThings
не относится к типу указателя, то это действительно все-таки перекрестная ссылка? Думаю, я всегда думал, что moreThings
все еще представляет собой базовый адрес многомерного массива. Что, если doThings
принял вход thingsGoHere
и сам передал его другой функции?
Правильно ли это правило, что, если не указать вход массива как const
, тогда массив всегда будет изменяться?
Я знаю, что материал проверки типов происходит только во время компиляции, но я все еще смущен тем, что технически считается передачей по ссылке (т.е. только когда передаются аргументы указателя типа или массив массивов указателей также и пропуская ссылку?)
Прошу прощения за то, что у меня есть вопрос, но из-за моей трудности в понимании этого трудно сформулировать точный запрос.