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

не совсем понимаю код *указатели - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как поменять точку на запятую в Visual C++ 6? http://www.cyberforum.ru/cpp-beginners/thread520540.html
У меня в разделе Язык и региональные стандарты выставлена запятая(Делитель целой части и дробной). Т.е. для всей системы правильно число пять с половиной будет выглядеть как 5,5, а не как 5.5 И во...
C++ В массиве целых чисел найти и распечатать все пары одинаковых чисел В массиве целых чисел найти и распечатать все пары одинаковых чисел. За помощь буду очень благодарен. //В массиве целых чисел найти и распечатать все пары одинаковых чисел #include <iostream>... http://www.cyberforum.ru/cpp-beginners/thread520521.html
Программное включение языка ввода C++
Хотелось бы, чтобы при запуске приложения не приходилось бы выбирать нужный язык и регистр ввода Windows-овскими сочетаниями клавиш. Подскажите, пожалуйста, как программно включить нужный язык и...
Написать в начало файла C++
Здравствуйте. Можно ли с помощью потоков писать в начало файла? Без использования fseek? Если да, напишите как, пожалуйста.
C++ Вычислить значение функции, нарисовать блок-схему http://www.cyberforum.ru/cpp-beginners/thread520499.html
Помогите пожалуйста сделать блок схему: С помощью оператора WHILE написать программу, для вычисления значений функции F(x) на отрезке с шагом h. F(x)=cosx+ctgx
C++ Структуры Необходимо разработать программу, в которой выполняется ввод списка записей определенного типа, а затем - обработка списка. Сначала в программе должен вводиться размер списка (целое число), а сам... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6513 / 3150 / 309
Регистрация: 04.12.2011
Сообщений: 8,720
Записей в блоге: 5
17.03.2012, 02:25
Цитата Сообщение от electromind Посмотреть сообщение
C++
1
2
while(*p2 && *p2 == *p)
{ p++; p2++; }
Задача не кажется сложной даже для человека в чистом С++ не разбирающегося (меня), по-этому попробую.
p2 и p объявлены указателями на char. Операция * - операция разадресации дающая содержимое памяти (значение) на которое указывает указатель, т.е. в нашем случае - char. Стало быть в логическом блоке оператора цикла while первый символ *p будет неявно преобразован к bool, то есть в случае если операция разадресации пройдет с результатом - нулевой указатель - false, об этом сказал Infinity3000, иначе если арифметический эквивалент (char внутренне - целый тип и легко преобразуется в выражениях где ожидается целое в целое) символа - ноль тоже false, и во всех остальных случаях - true. Другими словами в сочетании с p2++; в теле цикла первое условие перемещает указатель по непрерывной области памяти, пока p2 указывает на char "не равный нулю".
Второе условие сравнивает символы *p2 и *p и пока они совпадают разрешает перемещение указателей p2 и p. Цикл прекратится если p2 указывает не на char или на char преобразуемый к 0, или символы по адресам p2 и p разные (до первого расхождения). Из области фантазий: можно предположить, что строки p2 и p1 могут отличаться (а могут и нет) и ищется позиция символа - где есть первое расхождение. Но могут конечно быть и другие варианты.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.