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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
#1

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

11.09.2009, 22:30. Просмотров 1831. Ответов 21
Метки нет (Все метки)

Читаю про указатели, тут для примера,предоставляется код. Программа ищет какую-то подстроку в строке. Кто нибудь может объяснить,каким образом ищется подстрока из этого кода,если не сложно. Заранее благодарю.


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 <iostream>
using namespace std;
 
char *get_substr(char *sub, char * str);  //char *get_substr возвращает указатель на char,что Это даёт?
 
int main()
{
    setlocale(0,"");
    char *substr = get_substr("три","один два три четыре");
    cout<<"Заданная подстркоа найдена: "<<substr;
    cin.get();
 
}
 
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(*p2 && *p2 == *p)  //Это неизвестно что делается
        {
            p++;
            p2++;
        }
if(!*p2)         //Это неизвестно что такое
return start;
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2009, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возвращение функциями указателей (C++):

Возвращение функциями указателей - C++
Доброго времени суток:) Помогите понять код!!!Суть вопроса описана в коментах в коде. Условие задачи:В программе демонстрируеться...

Возвращение из функции массива указателей - C++
Здравствуйте. Мне нужно вернуть из функции массив указателей. Внутри функции создаю динамический массив указателей, в который помещаю...

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2009, 00:15 #16
потому что char - это один символ, а char* - массив символов
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
15.09.2009, 00:50 #17
M128K145,
потому что char - это один символ, а char* - массив символов
а теперь - правильный ответ (:
потому что char - это один символ, а char* - это указатель на один символ (что, впрочем, не мешает запихать туда много симаолов)
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
15.09.2009, 00:54  [ТС] #18
C++
1
char* - это указатель на один символ
На что именно тогда указывает функция *get_substr,
как знать? Что будет,если не прописать знак звёздочки в этой программе,тоесть написать:
C++
1
char  get_substr(char *sub, char * str)
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
15.09.2009, 01:00 #19
Цитата Сообщение от Golovastik Посмотреть сообщение
Что будет,если не прописать знак звёздочки в этой программе,тоесть написать:
Да тупо не скомпилируется, будет ошибка некорректного преобразования char* в char. *start же указатель, а не символ.
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
15.09.2009, 01:01 #20
если без звезды то это значит,вернется один символ,а со звездой возвращается указатель на символ
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
15.09.2009, 01:06 #21
Golovastik,
На что именно тогда указывает функция *get_substr,
ни на что не указывает. и не может. она возвращает указатель.

Что будет,если не прописать знак звёздочки в этой программе,тоесть написать:
будет возвращать символ. на практике возникнет ошибка компиляции из-за несоответствия типов.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
15.09.2009, 03:29 #22
Цитата Сообщение от Golovastik Посмотреть сообщение
На что именно тогда указывает функция *get_substr,
Не на что не указывает. Функция просто возвращает указатель. По аналогии, смотри:
это я надеюсь тебе поятно(просто чтобы освежить память):
C++
1
2
3
4
5
6
7
8
9
10
11
//функция возвращает int
int func(int a) 
{ 
    return a+1;              //вернём значение а увеличенное на 1
}
//...................................................................................
int main()
{
    int value = func(10);  //переменной value присвоили значение 11
    return 0;
}
Теперь вернём указатель
C++
1
2
3
4
5
6
7
8
9
10
11
12
char* func(char *str)
{
    char *p = str+7;             //указатель p теперь указывает на 7 символ строки str
    return p;                    //вернём этот указатель
}
//...................................................................................
int main()
{
    char s[] = "Simple string"; 
    char *pointer = func(s);   //теперь pointer указывает на букву s(маленькую) в строке Simple string
    return 0;
}
Добавлено через 4 минуты
А вот так
C++
1
2
3
4
5
6
char* func()
{
    char str[] = "Simple string";
    char *p = str + 7;
    return p;
}
делать нельзя
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2009, 03:29
Привет! Вот еще темы с ответами:

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace...

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2009, 03:29
Ответ Создать тему
Опции темы

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