Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 06.03.2020
Сообщений: 13

Как передать несколько переменных в функцию ?

07.04.2020, 22:18. Показов 1797. Ответов 5
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Это выборочные строчки кода, мне кажется не стоит скидывать весь код, так как проблема локальная. Подскажите, пожалуйста, способ, как можно передать в функцию несколько переменных, (в моем случае мне надо передать, кромне j, еше и k). Я услышал, что можно применить struct, но реализацию не показали. Спасибо !
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//объявление массива потоков
HANDLE *hThreadArray = new HANDLE[q];
 
hThreadArray[j] = CreateThread(NULL, 0, MyTh, (LPVOID)j, 0, NULL);
 
// функция, реализующаяся в потоке
DWORD WINAPI MyTh(LPVOID lpParam)
{
    int j = (int)lpParam;
 
    C[j] += A[j][k] * O[k];
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2020, 22:18
Ответы с готовыми решениями:

Как передать в функцию две переменных?
Хочу написать простейших калькулятор через условия (Если пользователь выбрал 1, значит вызываем функцию сложения, если 2 - вычитания), и...

Как заставить функцию изменить несколько переменных?
Доброго времени суток,столкнулся с такой проблемой: в функции действие (скажем some_varriable++) выполняется локально, после выхода из нее...

Как передать тегом Select несколько переменных
есть Select, который передает одну переменную значение которой равно выбраному значению. А как сделать чтобы при выборе определенного...

5
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
07.04.2020, 23:15
примерно так

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
struct s_my_params
{
    int a=0;
    int j=0;
};
 
...
...
 
auto* p=new s_my_params;
p->a=1;
p->j=2;
hThreadArray[j] = CreateThread(NULL, 0, MyTh, (LPVOID)p, 0, NULL);
...
...
 
 
DWORD WINAPI MyTh(LPVOID lpParam)
{
    s_my_params my_params;
    {
       s_my_params* p=(s_my_params*)lpParam;
       my_params=*p;
       delete p;
    } 
    
    //my_params - можно юзать
 
 
    return 0;
}
2
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
08.04.2020, 00:06
Алексей1153, идея правильная, а реализация подкачала. Лучше так:
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
struct s_my_params
{
    int a=0;
    int j=0;
};
 
...
...
 
s_my_params p;
p.a=1;
p.j=2;
hThreadArray[j] = CreateThread(NULL, 0, MyTh, (LPVOID)&p, 0, NULL);
...
...
 
 
DWORD WINAPI MyTh(LPVOID lpParam)
{
    // вариант 1:
    s_my_params my_params = *(s_my_params *)lpParam;  // копирование параметров в локальную переменную
    //my_params - можно юзать в виде my_params.a
 
    // вариант 2:
    s_my_params *p_my_params = (s_my_params *)lpParam;  // просто приведение типа
    //p_my_params - можно юзать в виде p_my_params->a
 
    return 0;
}
Старайтесь избегать ситуации, когда память выделяется в одном месте, а освобождается в другом. Чревато.
1
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,096
08.04.2020, 07:02
L0M, нет, в данном случае правильно именно так, как я показал. Поясняю:


берём твой способ:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void run_my_thread
{
   s_my_params p;//переменная на стеке
   CreateThread(NULL, 0, MyTh, (LPVOID)&p, 0, NULL);
 
   *** прошло 0 мс ***
 
   //переменная р уничтожена со стека
}
 
 
DWORD WINAPI MyTh(LPVOID lpParam)
{
    *** где-то в глубинах ОС прошло 10 мс для организации потока ***
 
    s_my_params *p_my_params = (s_my_params *)lpParam;
 
    //p_my_params - указатель содержит адрес когда-то жившей на стеке переменной p из функции run_my_thread
 
    ***краш, привет!***
 
    return 0;
}
2
0 / 0 / 0
Регистрация: 06.03.2020
Сообщений: 13
08.04.2020, 18:26  [ТС]
Спасибо !
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
08.04.2020, 18:28
Алексей1153, согласен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2020, 18:28
Помогаю со студенческими работами здесь

Как передать несколько переменных через php
Проблема в том, что я не могу передать несколько переменных из php в action script, как это реализовать?

Как передать в функцию строку с именами переменных?
Всем доброго дня. Посоветуйте пожалуйста, как выпутаться из такой ситуации. Пишу скрипт на PHP, в нем было много однотипных кусков кода...

Как передать несколько параметров в функцию
Как передать несколько параметров в функцию? пытаюсь передать переменную s она объявлена глобально но бъет ошибку function...

Как передать в функцию потока несколько аргументов?
Приветствую. Вот программа. Хочу передать в потоки 2 функции min и max, как передать в pthread_create аргументы к ним? #include...

Как передать в функцию несколько аргументов, и другие глупые вопросы
Доброго времени суток. Накопилось несколько вопросов, от простых до очень простых, и все же нужную информацию по ним не нашел. Глупо для...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru