Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Jzx
0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 58
#1

Понять обратное отображение строки из Шилдта

Вчера, 03:23. Просмотров 45. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
void reverse(char *s);
 
int main(){
  char str[] = "this is a test";
  reverse(str);
  return 0;
}
 
void reverse(char *s){
  if(*s) 
    reverse(s+1); 
  else
    return;
  cout << *s;
}
Команда cout расположена так, что никогда не должна быть выполнена. Ведь если принимаемое значение — не символ конца строки, то функция вызывает себя и в момент вызова ничего не выводится. Если же подается символ конца строки, то команда return обеспечивает выход из тела функции, и тоже ничего не выводится.

Тем не менее, при запуске отображаются все символы в обратном порядке. Как же так получается, что недостижимая инструкция включается в работу программы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
Вчера, 03:23
Ответы с готовыми решениями:

Понять программу, таймер от Шилдта
Здарова! Читал я тут Шилдта и при прочтении так и не смог уяснить кое-чего.....

Прямое и обратное отображение набранных символов в консоли
#include &lt;iostream&gt; using namespace std; int main() { string s; int i;...

строки в С++.. не могу их понять..
задание такое преобразовать строку, содержащую выражение на Си с операциями...

Не могу понять как правильно считать строки
Задача: Задача1. «Поиск в строке» Самым популярным вопросом прошлого...

Не могу понять 2 строки кода функции из методички
Это код добавления элемента в линейный двунаправленный список. Не пойму 12 и 13...

6
Kuzia domovenok
2238 / 2007 / 456
Регистрация: 25.03.2012
Сообщений: 7,065
Записей в блоге: 1
Вчера, 03:29 #2
хосспаде, ну тык пройди отладчиком пошагово с Zаходом во все функции и сам убедись, когда будет выполнена "команда cout" или никогда.
она будет выполнена после авершения работы очередного вызова reverse
0
Jzx
0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 58
Вчера, 03:41  [ТС] #3
Kuzia domovenok, не знаю, что такое отладчик. В GCC он есть?
0
Kuzia domovenok
2238 / 2007 / 456
Регистрация: 25.03.2012
Сообщений: 7,065
Записей в блоге: 1
Вчера, 03:48 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
void reverse(char *s);
int main() {
    char str[] = "this is a test";
    reverse(str);
    return 0;
}
void reverse(char *s) {
    cout << ">>coming in reverse(" << s<<")"<< endl;
    if (*s)
        reverse(s + 1);
    else {
        cout << "<<coming out reverse(" << s << ")" << endl;
        return;
    }
    cout << *s << endl;
    cout << "<<coming out reverse(" << s << ")" << endl;
}
0
Jzx
0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 58
Вчера, 03:50  [ТС] #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
после авершения работы очередного вызова reverse
Функция reverse вызывает сама себя. Когда все эти вызовы завершаются?
0
Kuzia domovenok
2238 / 2007 / 456
Регистрация: 25.03.2012
Сообщений: 7,065
Записей в блоге: 1
Вчера, 03:56 #6
Цитата Сообщение от Jzx Посмотреть сообщение
Функция reverse вызывает сама себя. Когда все эти вызовы завершаются?
в таких случаях, когда ты не понимаешь рекурсию, довольно вредно говорить про неё "вызывает сама себя".
Возникает иллюзия, что программа тупо прыгает из строки 14 в строку 12, словно там написано goto
Это абсолютно неверно.
Гораздо правильнее сказать она вызывает не себя, а функцию reverse в новом контексте, старая при этом никуда естественно не исчезает, а терпеливо ждёт своего часа, чтобы продолжить выполнять всё, что написано после строки 14, когда придёт её очередь.
0
Jzx
0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 58
Вчера, 03:58  [ТС] #7
А, ну вроде ясно: инструкция return; относится только к последнему вызову функции, а ко всем предыдущим она не будет применена.
0
Вчера, 03:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Вчера, 03:58

Строки в С++, не могу понять что неправильно в программе
Необходимо: 1) Найти количество слов в строке, 2) вывестии все слова в порядке...

Вывод строки. Не могу понять, в чем дело
Добрый вечер. В программе на вход подается строка типа &quot;слово1-слово2&quot;,...

Книги Шилдта
Скажите пожалуйста в чем разница между двумя его книгами: -&quot;Самоучитель С++&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru