Вы можете передать весь словарь через несколько неуклюжий
void foo(char dict[][MAX_CHARS], int whichWord);
, т. Е. Точно указав компилятору, насколько велика каждая строка 2D-массива в этом случае, и какую строку вы хотите использовать в качестве отдельного параметра.,Затем вы используете обычную двухстрочную запись для доступа к элементам.
Для прохождения одной строки этого массива тоже легко.Допустим, вы угадаете второе слово:
void foo(char[] word, int numChars);
foo(&(dict[1][0]), MAX_CHARS);
, которое может быть немного впереди вашего, но говорит: «возьмите адрес в памяти первого символа в строке, которую я хочу, вторая строка (помните: индексирование на основе 0!), и рассматривайте его как начало одномерного массива. "
Проблема, которую необходимо решить с помощью этого подхода, заключается в указании подпрограмме, сколько символовв твоем слове.Если вы используете MAX_CHARS, у вас есть проблема, потому что, вероятно, не каждое слово имеет такую длину, а символы, которые вы не присваиваете, неинициализирован ;то есть у вас может быть куча символов мусора в конце вашего ряда, одним из которых может быть даже персонаж, которого вы ищете!Обычное решение для этого состоит в том, чтобы поставить 0-значный символ, написанный '\ 0', в конце каждого слова, чтобы функция знала, что остановить, когда увидит его.Вам нужно будет добавить это в конец каждого слова, которое вы инициализируете, и вам может понадобиться увеличить MAX_CHARS, чтобы освободить место для него, потому что это символ, похожий на все остальное в вашем слове.
Гораздо лучшим решением будет превратить ваш dict в одномерный массив строк, то есть
char* dict[MAX_WORDS];
, но для этого нужно, чтобы вы были знакомы с указателями и строками, поэтому вернитесь к нему, когда будете готовы.