|
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67
|
||||||
Возвращение функциями указателей24.01.2011, 00:21. Показов 3282. Ответов 8
Метки нет (Все метки)
Доброго времени суток
![]() Помогите понять код!!!Суть вопроса описана в коментах в коде. Условие задачи:В программе демонстрируеться использование указателя в качестве типа возвращаемого значения.Ф-ция get_substr() возвращает указатель на первую подстроку(найденную в строке),которая совпадает с заданной.Если заданная подстрока не найдена,возвращается нулевой указатель.
0
|
||||||
| 24.01.2011, 00:21 | |
|
Ответы с готовыми решениями:
8
Возвращение функциями указателей Возвращение из функции массива указателей
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 24.01.2011, 01:20 | |
|
Rusl_v, if (!*p2)
Каким-то странным мне кажется это условие. Ты уверен что ты добиваешься именно этого? Если по адресу p2 содержится ноль - тогда выходим из функции?
0
|
|
|
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
|
|
| 24.01.2011, 01:38 | |
|
код из книги Шилдта, причем там все подробно расписано
Forever там суть такая берем первый символ и от него начинаем искать подстроку, соответственно если совпадает то указатель *p2 указывает на 0, и тогда выходим из функции т.к. нашли подстроку. Если это не так берем второй символ и от него ищем и т.д Rusl_v вложенный цикл while ищет подстроку начиная с символа str[0], соответственно если буквы равны и НЕ конец подстроки, то передвигаем указатель. Если указатель не будет указывать на 0, то берем символ str[1] и от него ищем подстроку
1
|
|
|
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67
|
|||
| 24.01.2011, 02:27 [ТС] | |||
![]() Добавлено через 5 минут А почему тогда "четыре" тоже находит они же не равны со второй строкой???указатель start возвращает по символу правильно я понимаю??? Ребят я вас чуток подгружу тут вы не против??))Я просто ф-ции начал изучать вроде всё понял но тут явно какоето колдунство)) Добавлено через 33 минуты Получаеться что *start передаёт не по одной букве а передаёт ВСЮ строку после буквы 'т'???Так что-ли получаеться?
0
|
|||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 24.01.2011, 05:40 | ||
|
Поэтому, возвращая start, ты возвращаешь указатель на некоторую область памяти (в которой, предположительно, храниться массив символов - строка). Вот тебе пример: вызов функции get_substr c аргументами sub = "ab" (подстрока, которую мы ищем) и str = "cabk" (строка, в которой мы ищем подстроку). При этом, и sub, и str сами являются указателями, т.е. хранят некоторый адрес, по которому хранится строка. Предположим, что str = offset, т.е. по адресу offset в памяти распологается символ 'c', по адресу offset + 1 -- символ 'a', offset + 2 -- символ 'b', по адресу offset + 3 -- символ 'k', по адресу offset + 4 -- символ '\0' (нуль-терминатор, символ, который в С играет роль конца строки): Первое вхождение подстроки начинается с символа 'a', поэтому мы возвращаем адрес offset + 1, а по этому адресу хранится строка "abk".
1
|
||
|
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67
|
|
| 24.01.2011, 10:22 [ТС] | |
|
Даже так....хм,очень большое спасибо за разъяснения.Я всегда предполагал что каждый символ имеет свой адрес так сказать личный,а указатель ссылается на этот адрес каждого символа, из-за этого у меня появилось куча вопросов.
А тут получается:__________А я думал что: offset+0 - 'c''a''b''k''0' _______offset+0 - 'c' offset+1 - 'a''b''k''0' _________offset+1 - 'a' offset+2 - 'b''k''0' ___________offset+2 - 'b' offset+3 - 'k''0' _____________offset+3 - 'k' offset+4 - '0' ______________offset+4 - '0' Всем спасибо
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 24.01.2011, 10:29 | ||
|
0
|
||
|
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67
|
||
| 24.01.2011, 11:21 [ТС] | ||
|
Добавлено через 40 минут Прочитал ещё раз про указатели и вот что нашёл: "Если С++ компилятор обнаруживает строковый литерал,он сохраняет его в таблице строк программы и генерирует указатель на нужную строку." Например: char *ptr; ptr="блаблабла"; При выполнении этого кусочка программы символы,образующие строковую константу,сохраняются в таблице строк,а переменной ptr присваивается указатель на соответствующую строку в этой таблице! А если бы был массив то тогда(вернёмся к старому коду) start указывал на определённый символ(а не на строку),во как. Правильно я понял это всё?
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 24.01.2011, 12:08 | ||
|
1
|
||
| 24.01.2011, 12:08 | |
|
Помогаю со студенческими работами здесь
9
Возможно ли возвращение функцией двух значений? Именно возвращение, не ссылка или указатель возвращение значений функциями
В чем различие между функциями VBA и функциями Excel? Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|