powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача по ссылке
25 сообщений из 32, страница 1 из 2
Передача по ссылке
    #39576298
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день уважаемые программисты.

У меня есть внешний метод с сигнатурой

func(char *thePointer);

Я хочу создать на стеке массив типа long[] и передать ссылку на него в этом метод

Подскажите как это правильно сделать ?

Спасибо.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576325
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, спасибо.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576422
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семенович,

сам подумал, сам решил. Задал вопрос - напиши ответ.
а то так скучно на этой ветке когда везде бороздят просторы ...
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576429
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вопросик то для начинающий

Я полагал что местные гуру С++ должны такое знать

Я то вообще джавист С++ только начинаю учить и поэтому дурацкие вопросики задаю тут
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576452
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичЯ полагал что местные гуру С++ должны такое знать
покажи как сделал, а гуру при необходимости выдадут рекомендации
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576453
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семенович,

авторЯ хочу создать на стеке... Только помни, сколько он проживет.

В С массив и указатель на 1й элемент - одно и тоже. А за памятью следи сам.

Ссылки - это чуть другое (разница легкая, но есть)
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576462
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилСемен.СеменовичЯ полагал что местные гуру С++ должны такое знать
покажи как сделал, а гуру при необходимости выдадут рекомендации

long buffer[8];
char *pointer = reinterpret_cast<char *>(&buffer);
func(pointer);

по идее пока мы снизу стека то что сверху не должно быть удалено

запустил компилится и работает

Если криво написал сильно не бейте :)
я новичок в плюсах
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576464
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семенович,

мог бы написать проще
Код: plaintext
1.
func((char*)buffer);



важнее, как ты потом будешь это интерпретировать.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576469
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglСемен.Семенович,

мог бы написать проще
Код: plaintext
1.
func((char*)buffer);



важнее, как ты потом будешь это интерпретировать.

Я передаю указатель во внешнюю либу
Она ожидает это как поток байт.

А в чем разница между моим и твоим подходом ?

Я где то читал reinterpret_cast вообще не хорошо использовать

Однако открывал некоторые проекты на гитхабе и там вовсю эту конструкцию используют.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576471
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Семен.СеменовичА в чем разница между моим и твоим подходом ?

Я где то читал reinterpret_cast вообще не хорошо использовать.
Там где это написано, забыли добавить, что reinterpret_cast<T*> плохо, а (T*) ещё хуже :)
И не уточнили, что "плохо" - это не категоричное плохо, а просто предостережение начинающим :)
И забыли добавить, что конкретно reinterpret_cast<char *> - вообще хорошо, т.к. не нарушает strict aliasing: https://ru.stackoverflow.com/questions/503265/Что-такое-strict-aliasing
Так что код у вас верный.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576484
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичА в чем разница между моим и твоим подходом ?

Твой - C++. Его - С.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576488
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСемен.СеменовичА в чем разница между моим и твоим подходом ?

Твой - C++. Его - С.

Я бы сказал, что в обоих случаях, функции в качестве аргумента достанется один и тот же адрес.
Исходя из этого, можно было бы вообще не кодировать, а записать явно:
Код: plaintext
1.
2.
3.
4.
5.
union param_u {
  long buffer[8];
  char str[1];
} param;
func(param.str);
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576497
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичДобрый день уважаемые программисты.

У меня есть внешний метод с сигнатурой

func(char *thePointer);

Я хочу создать на стеке массив типа long[] и передать ссылку на него в этом метод

Подскажите как это правильно сделать ?

Спасибо.

никак.
надеюсь, ты рзобралсяа правильно
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576511
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

никак ?


вон сколько советов дали уже
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576607
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичMasterZiv,

никак ?


вон сколько советов дали уже
Некоторыми новоградами считается, что плохой стиль

ещё плохому научу:
если нужно выделение памяти с размером, неопределяемым на этапе компиляции, в большинстве компиляторов поддерживается alloca
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576622
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Некоторыми новоградами считается, что плохой стиль


А как правильно ?

Выделять char[] на стеке ?
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576626
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семеновичkealon(Ruslan)Некоторыми новоградами считается, что плохой стиль


А как правильно ?

Выделять char[] на стеке ?я думаю MasterZiv имеет мнение против самой идеи, но наверное было бы лучше если бы он сам пояснил

а как это сделать в случае нужды - у вас уже есть целых два способа
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576627
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем сама идея то плоха ?

Ну не хочу я в хипе массив выделять - непроизводительно это
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576660
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичА чем сама идея то плоха ?
Размером стэка. Он всего 1 Мб по-умолчанию.
Не забывай об этом, если массивы на стэке будешь размещать.
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576663
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСемен.СеменовичА чем сама идея то плоха ?
Размером стэка. Он всего 1 Мб по-умолчанию.
Не забывай об этом, если массивы на стэке будешь размещать.

Так у меня размер массивчика 16 байт

Длина фиксирована
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576667
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичА чем сама идея то плоха ?

Ну не хочу я в хипе массив выделять - непроизводительно это
не такие уж и большие потери.

но да, на стеке быстрее, хотя и не так безопасно в перспективе
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576671
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А рекурсия безопасна ?

Создаем метод с двумя параметрами

method(long t1, long t2)

на каждой итерации рекурсии получаем плюс те же 16 байт

Граждане вы что ?
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576704
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.СеменовичА рекурсия безопасна ?

Абсолютно безопасна, если контролируется максимально допустимый уровень вложенности. А без такого контроля ее и не используют. Ну, за исключением, разве что, студентов )
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576716
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

А как эту глубину кстати грамотно контролировать ?

Просто регулируя глубину вложенности через доп параметр ?
...
Рейтинг: 0 / 0
Передача по ссылке
    #39576752
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семеновичptr128,
А как эту глубину кстати грамотно контролировать ?

Зависит от компилятора и от платформы. Под Linux доступна функция getrlimit(), в Windows можно воспользоваться VirtualQuery(), на микроконтроллерах просто считаю напрямую, используя размер статического блока, указатель стека и количество оперативной памяти.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача по ссылке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]