|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
Передать значени через глобальную переменную или указатель23.05.2009, 11:19. Показов 5845. Ответов 14
Метки нет (Все метки)
Имеется функция, которая должна возвратить строковое значение. Сделал 2 способами. 1 - объявил глобальной переменной строку и передавал в функцию указатель на эту переменную. 2 - передал функции указатель на строку, а вернул указатель на строку, которая была сформирована внутри функции. Хотелось бы узнать как правильнее поступить, если с помощью функции надо модифицировать(вернуть) строку??
0
|
|
| 23.05.2009, 11:19 | |
|
Ответы с готовыми решениями:
14
Как передать глобальную переменную в twig как передать глобальную переменную в класс Через CreateThread в поток передать указатель на форму или ее элемент |
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
| 23.05.2009, 11:24 | |
|
в хорошем стиле написания, лучше писать без использования глобальных перменных
Добавлено через 1 минуту 24 секунды но дело в том, что если используются глобальные пременные, я не вижу смысла передавать указатель на глобальную перменную. она видна во всех функциях.
0
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 23.05.2009, 11:26 [ТС] | |
|
Ну вот по моим скудным ощущениям такой же вывод. Тогда вопрос про время жизни переменной. Если мы в функции создаем строковую переменную, заполняем ее данными и возвращем указатель на нее. Разве это правильно. По идее строковая переменная действительна только внутри функции. Вот это у меня что-то не укладывается...
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|||||||
| 23.05.2009, 11:34 | |||||||
но если вы передаете строку, то она подвержена изменению... т.е. например вот этот код будет работать корректно.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
||||||
| 23.05.2009, 12:04 [ТС] | ||||||
|
Собственно вот пример моей ситуации:
0
|
||||||
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||||||
| 23.05.2009, 12:12 | ||||||
|
ну например вот так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 23.05.2009, 12:18 [ТС] | |
|
Ой пардон. я вспомнил. Я так делал, вот только у меня функция в другом файле. Точнее даже не так. У меня функция parser она просто выбирает из списка функций какой передать входные значения(buf_in) и уже в следующей происходит одработка. Вот только последняя функция находится в другом файле. И собственно поэтому у меня не прокатывало так сделать.
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
| 23.05.2009, 12:25 | |
|
ничего не понял
![]() собственно, указатели для того и нужны, чтоб иметь доступ из функций, без потребности глобальных пременных.. передваемый указатель buf_out вы можете передать и в другую функцию.
1
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 23.05.2009, 12:45 [ТС] | |
|
если у нас функции разбросаны по разным исходным файлам, которые компонуются вместе. Будет ли работать тогда такая схема??
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
| 23.05.2009, 12:48 | |
|
ну да... получается вот что:
у тебя функция работает с адресом, передаваемым в параметре... и этот адрес, можно передавать из одной функции в другую. другое дело, что я не вижу всего листинга, и не знаю что и как ты передаешь.
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 23.05.2009, 12:51 | ||
когда у тебя глобальная строка, то и передавать её не надо, функция уже её видит (глобальный стиль делает функции зависимыми, может сковывать программу и эти переменные висят всё время в памяти, переменные же внутри функций создаются только на время вызова и освобождают память как только функция завершилась, нужно поддерживать возможность удаления любой функции из программы, и, если она будет зависеть, то, удалив за ней глобальную переменную, можешь оставить другую зависимую функции без данных или же захочешь исправить что-то в ходе программы с помощью одной функции, которая работает с глобальной переменной, забудешь все функции поправить и некоторые будут продолжать менять глобальную переменную (не найдёшь потом какие именно), когда функций всё больше и больше, это будет сказываться на сложности программы (она должна быть простой независимо от своего размера))
1
|
||
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 23.05.2009, 13:02 [ТС] | |
|
Да я в принципе это понимаю. У меня сложность возникла с возвратом строки из функции(ну фактически возвратом адреса). Я просто думал, что если функция сформировала строку(свою локальную переменную), то при выходе из функции все ее локальные переменные уничтожаются и она уже не может возвратить адрес нужной мне переменно, т.к. самой переменной уже нет
Добавлено через 32 секунды Честно говоря до сих пор не очень врубаюсь))
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||
| 23.05.2009, 14:16 | ||
|
0
|
||
|
|
|||||||||||
| 23.05.2009, 16:14 | |||||||||||
|
toxxin, было бы лучше, если бы ты пояснил конкретно, какое действие ты реализуешь, а то по тому, что ты написал, сложно что-то понять. Если я правильно тебя понял, то нужно делать так
Однако при описанном подходе надо иметь ввиду, что второй вызов процедуры пишет в тот же буффер, а потому если тебе значение нужно перетащить через второй вызов - оно испортиться.
1
|
|||||||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 24.05.2009, 10:52 | ||
1
|
||
| 24.05.2009, 10:52 | |
|
Помогаю со студенческими работами здесь
15
Передать в процедуру "ссылку" на глобальную переменную Как создать (проинициализировать) глобальную переменную или глобальный класс управляемого типа? Как передать переменную окна через текстовую переменную? Как при создании дочернего окна передать ему указатель на static-переменную в оконной процедуре родительского? Изменить переменную класса через указатель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|