Хобрук: Ваш путь к мастерству в программировании

Ожидается «char **», но аргумент имеет тип «char (*) [25]»

void test(char **arr)
{
    // do something
}

int main()
{
    char arr[10][25];
    test(arr);
}

Когда я пытаюсь скомпилировать это с помощью gcc v8.2.1, это дает мне следующие ошибки:

prog.c:8:8: warning: passing argument 1 of ‘test’ from
incompatible pointer type [-Wincompatible-pointer-types]
  test(arr);
       ^~~ 
prog.c:1:19: note: expected ‘char **’ but argument is of type ‘char (*)[25]’
  void test(char **arr)
            ~~~~~~~^~~

Это для домашнего задания, поэтому мне не разрешено изменять тестовую функцию, чтобы она брала массив (а не указатель на указатель), и мне нужно убедиться, что массив, объявленный в main, имеет эти размеры (не больше и не меньше).

Как мне это сделать?


  • Просто добавлю, похоже, что ваша школа учит вас создавать зубчатые массивы из динамически распределенных подмассивов... нехорошо. Мне жаль. 13.03.2019
  • Что мне делать вместо этого? Меня заставляют использовать указатели (нам не разрешено это менять), но мы можем сделать массив таким, каким захотим. Мы еще не узнали об указателях, а массив должен иметь фиксированный размер. 13.03.2019
  • Почему вас вынуждают использовать указатели, если вы еще не узнали об указателях? Звучит так, как будто вам нужно попросить своего учителя разъяснить их ожидания. 13.03.2019
  • Я тоже об этом думал. В присваивании также есть место, где мы передаем одномерный массив (объявленный: char arr[25]) в метод, а метод принимает char *arr. Это прекрасно работает. Я подумал, что странно, что один работает, а другой нет, и в то же время в задании не упоминается, что они разные. 13.03.2019
  • Это довольно тонкая особенность C и C++, но на это есть веские причины. Мне странно, что тебя еще не научили этому, если от тебя ждут, что ты напишешь на нем проект. 13.03.2019
  • Думаю, в таком случае я мог бы написать лектору по электронной почте. Я думал, что это то, что я должен был понять, но, похоже, это недостаток обучения от его имени. Спасибо 13.03.2019

Новые материалы

Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

Генерация ваших собственных удивительных QR-кодов с использованием Python
QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..