Форум программистов, компьютерный форум, киберфорум
Наши страницы

Объясните программу сложения строк с использованием указателей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка использования неиницилизированных переменных http://www.cyberforum.ru/cpp-beginners/thread1765651.html
const int D_petrol = 100; double D, petrol, petrol_D; double Cost_petrol_1,Cost_petrol_2,Cost_petrol_3; double Price1, Price2, Price3; cout << "Distance is " << D; cin >> D; cout <<...
C++ Программа не использует цикл for Объясните пожалуйста почему программа просто пропускает цикл и что нужно сделать для того чтобы она его использовала.Она просто выдает http://prntscr.com/bhv9cw #include "stdafx.h" #include... http://www.cyberforum.ru/cpp-beginners/thread1765648.html
C++ Впечатления от прочтения стандарта
Сколько у вас уходило времени на прочтение стандарта? Тяжело ли он читается? Если человек до этого читал всякие вводные книги по С++, типа Праты, Лафоре, Липпмана и прочих, то после прочтения...
Удаление и добавление элементов динамической структуры данных C++
Структура "Абитуриент": - фамилия, имя, отчество; - год рождения; - оценки вступительных экзаменов (3); - средний балл аттестата. 1. Удалите элемент c указанным номером. 2. Добавьте элемент...
C++ Какой способ работы с файлами лучше? http://www.cyberforum.ru/cpp-beginners/thread1765562.html
Мне известно по крайней мере три способа: 1 TStringList::LoadFromFile 2 std::ofstream 3 FILE *fp = fopen Чем отличаются эти способы? Какой из них самый быстрый и почему? Какой способ...
C++ Сформировать квадратную матрицу порядка n по заданному образцу Сформировать квадратную матрицу порядка n по заданному образцу. Добавлено через 5 минут 1 1 1 ... 1 1 1 1 0 0 ... 0 0 1 1 0 0 ... 0 0 1 . . . \ . . . подробнее

Показать сообщение отдельно
Humpty
14 / 14 / 5
Регистрация: 10.03.2016
Сообщений: 35
18.06.2016, 13:52
Честно, похоже на пример из книжки "Как не надо программировать на C++" (кстати, классная, почитайте)

C++
1
2
while (*s1 != '\0')
        s1++;
Хорошая строка на C кончается нуль-символом (\0). Мы берем указатель s1, смотрим на значение за ним, если оно не равно нулю, инкрементим указатель. Как только дошли до нуль-символа, указатель s1 смотрит на конец строки.

C++
1
2
  for ( ; *s1 = *s2; s1++, s2++)
         ;//пустой оператор
Начнем с того, что этот цикл эквивалентен следующему

C++
1
2
3
4
while (*s1 = *s2) {
  s1++;
  s2++;
}
В условии происходит следующее, значение за указателем s2 присваевается по адресу s1. Сам по себе оператор присвоения возвращает значение присваемого значения. Т.е. если кто-то напишет
C++
1
return a = 42;
то функция вернет 42.

Здесь, если по адресу s2 лежал нуль-символ, то цикл прервется. Понятно, в теле цикла мы просто двигаем вперед оба указателя s1 и s2. При этом s1 в начале второго цикла указывал на конец строки.

А потом функция возвращает ноль, что бы это не значило...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru