#arrays #c #string #for-loop #pointers
Вопрос:
Я начинаю изучать язык Си и столкнулся с проблемой возврата функции. Я создал функцию, которая выводит имена чисел до 9 из входного числа. Входя, я не получаю возврата от функции. Я не вижу, в чем ошибка.
Это мой код:
void for_loop(int n1, char array[]){ for(int index = n1; index lt;= 9; index ) { printf("%sn", array[index]); } } int main() { int num1 = 2; char* numbers[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; for_loop(num1, *numbers); return 0; }
Комментарии:
1. Проблема в том, как вы объявляете параметр
array
в функции. Это должно бытьchar* array[]
, и вы должны передать это какfor_loop(num1, numbers);
2. Да, вот что
void
это значит. Какое возвращаемое значение вы ожидаете ?3. @KonradRudolph он, вероятно, имеет в виду «моя функция ничего не делает».
4.
void for_loop(int n1, char *array[])
. Вы передаете 2D-массив, но объявление вашей функции содержит 1D-массив.5. @KonradRudolph, Точно, это была опечатка. Спасибо за разъяснение, я не заметил.
Ответ №1:
Ваш код неверен:
Ты хочешь этого:
void for_loop(int n1, char *array[]) { for (int index = n1; index lt;= 9; index ) { printf("%sn", array[index]); } } int main() { int num1 = 2; char* numbers[10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; for_loop(num1, numbers); return 0; }
for_loop(num1, *numbers)
эквивалентно for_loop(num1, numbers[0])
тому, что эквивалентно for_loop(num1, "zero")
.
Комментарии:
1. Эм… Я понимаю, это была проблема с указателем. Я все еще учусь, и меня все еще смущает концепция указателей. Я смог увидеть, где я ошибся. Спасибо.
2. @zangstrell просто для большей ясности,
*numbers
эквивалентно*(numbers 0)
чему эквивалентноnumbers[0]
,*(numbers 1)
эквивалентноnumbers[1]
и т. Д.