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

Возвращение функциями указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать сведения о книгах http://www.cyberforum.ru/cpp-beginners/thread233230.html
Вот это прога, которая выносит мой мозг уже ни один час.... Преподу надо, чтоб прога по второму варианту (коду) работала так же как первая вот прога рабочая (Первая) #include <conio.h> #include <dos.h> #include <iostream.h> #include <string.h> #include <stdio.h>
C++ Метод Рунге-Кутта 4-го порядка #include <stdio.h> #include <iostream> #include <math.h> using namespace std; double f(double x, double y) { return(2*y/x+x*x*pow(2.7,x)); } http://www.cyberforum.ru/cpp-beginners/thread233224.html
Что такое Особенности Адресной Арифметики? C++
Что такое Особенности Адресной Арифметики? где-то вроде читал,что к этому относится инкрементирование...
C++ МАССИВЫ:Что такое приведённый индекс?
Что такое приведённый индекс? ну подскажите пожалуйста(
C++ Массива:что такое приведённый индекс? http://www.cyberforum.ru/cpp-beginners/thread233192.html
Что такое приведённый индекс?
C++ Математический функции Где можно прочитать про всякие математические функции в c++? Пользуюсь #include <math.h> Интересует, особенно, как записать число Пи. подробнее

Показать сообщение отдельно
Rusl_v
 Аватар для Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
24.01.2011, 00:21     Возвращение функциями указателей
Доброго времени суток
Помогите понять код!!!Суть вопроса описана в коментах в коде.
Условие задачи:В программе демонстрируеться использование указателя в качестве типа возвращаемого значения.Ф-ция get_substr() возвращает указатель на первую подстроку(найденную в строке),которая совпадает с заданной.Если заданная подстрока не найдена,возвращается нулевой указатель.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
char *get_substr(char *sub,char *str);
    
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char *substr;
    substr=get_substr("три","один два три четыре");
    cout<<"Заданная подстрока найдена:"<<substr;
    cout<<"\n";
    system("pause");
    return 0;
}
char *get_substr(char *sub,char *str)
{
    int t;
    char *p,*p2,*start;
    for(t=0;str[t];t++){            
        p=&str[t];                  
        start=p;                    
        p2=sub; //указатель всегда указывает на начало строки,т.е. буквы 'т'!!!(в цикле while он индексируеться)        
        while(*p2&&*p2==*p){    //При обнаружении 'т'=='т',передаёться это значение из ф-ции,так же 'р'=='р','и'=='и'
            p++;        //После обнаружение пробела и букв "четыре" это условие не выполняеться,т.к. p2 не равно p
            p2++;   //следовательно p2 не индексируеться
        }
        if (!*p2)       //следовательно это условие не выполняеться,т.к.
            return start;   //p2=sub;(начало цикла)...Так почему ретурн передаёт указатель на буквы "четыре" дальше??? 
    }                   //Результат выполненой программы:
    return 0;               //Заданная подстрока найдена:три четыре
}                       //В чём прикол не пойму,поидее тогда ретурн должен возвращать все буквы и не искать ничего,если по этой логике...
Где я не допонял подскажите,ломаю голову с самого утра над этим кодом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru