функция void ничего не возвращает — C

#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] и т. Д.