Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
#1

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

17.03.2012, 00:05. Просмотров 488. Ответов 3
Метки нет (Все метки)

изучаю указатели, столкнулся с кодом не совсем могу понять что происходит в функции *g_s,
особенно это условие
C++
1
*p2 && *p2 == *p
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <locale>
 
using namespace std;
 
char *g_s(char *sub, char *str);
 
int main ()
{
    setlocale(LC_ALL,"");
    char *substr;
 
    substr = g_s("tri", "odin dva tri 4etire");
 
    cout << "podstroka: " << substr;
        
    return 0;
}
 
char *g_s(char *sub, char *str)
{
    int t;
    char *p, *p2, *start;
 
    for(t=0; str[t]; t++)
    {
        p = &str[t];
        start = p;
        p2 = sub;
        while(*p2 && *p2 == *p)
        {
            p++;
            p2++;
        }
        if (!*p2)
            return start;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 00:05     не совсем понимаю код *указатели
Посмотрите здесь:

файл вещественных чисел, нужно поравить код совсем чуть-чуть C++
Не/ управляемый код С/С# указатели C++
Исправить код,чтобы использовались и указатели.(С++) C++
C++ Указатели. Не понимаю
C++ Объясните пожалуйста, как работает код. Указатели
C++ не понимаю код
Не совсем понятно как работает такой код C++
Код работает не совсем корректно со строками C++
C++ Слишком сложный код программы, ничего не понимаю(
Не понимаю, как работает код? C++
Переделать код под указатели C++
Не совсем понимаю задания C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
17.03.2012, 00:12     не совсем понимаю код *указатели #2
вот это условие

Цитата Сообщение от electromind Посмотреть сообщение
*p2 && *p2 == *p
равносильно этому

C++
1
*p2 != NULL && *p2 == *p // так наглядней
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
17.03.2012, 00:55  [ТС]     не совсем понимаю код *указатели #3
C++
1
2
3
4
5
while(*p2 && *p2 == *p)
                {
                        p++;
                        p2++;
                }
вот совсем не понимаю этот цикл... т.е. что он делает
разъясните если не трудно...
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,237
Записей в блоге: 3
17.03.2012, 02:25     не совсем понимаю код *указатели #4
Цитата Сообщение от 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 могут отличаться (а могут и нет) и ищется позиция символа - где есть первое расхождение. Но могут конечно быть и другие варианты.
Yandex
Объявления
17.03.2012, 02:25     не совсем понимаю код *указатели
Ответ Создать тему
Опции темы

Текущее время: 23:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru