Как передать двумерный статический массив в функцию на Си?

Есть массив char mass[1024][1024] и функция int fun(char*). При вставке функции fun(mass), компилятор выдаёт предупреждение о несоответствии типов, приходиться приводить тип fun((char*)mass){}или fun((char*)&mass){}. Есть ли возможность для указания статического массива как аргумента? И почему типы разные?
  • Вопрос задан
  • 3218 просмотров
Решения вопроса 1
wisgest
@wisgest
Не ИТ-специалист
Целиком массив в функцию не передаётся (если только не обернуть его в структуру), а передаётся указатель на его 0-й элемент и формальный аргумент функции должен быть указателем на тип элементов массива, передаваемого фактическим аргументом.
n-мерный массив — это 1-мерный массив (n-1)-мерных массивов и, соответственно, формальным аргументом функции должен быть указатель на (n-1)-мерный массив.
В данном случае
int fun(char (*)[1024]);
int fun(char (*m)[1024]) {/*...*/}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Есть массив char mass[1024][1024] и функция int fun(char*)

в такую функцию можно передать fun(&mass[0][0]).

Есть ли возможность для указания статического массива как аргумента?

В смысле массива статической размерности? Легко: int fun(char a[][1000]); ... fun(mass);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы