Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/88: Рейтинг темы: голосов - 88, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62

Передать массив структур в функцию

14.07.2014, 20:47. Показов 18716. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается передать в функцию массив(одномерный, не динамический) из структур, ругается(. Без разницы по указателю, ссылке, значению.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2014, 20:47
Ответы с готовыми решениями:

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

Передать массив структур в функцию
#include <iostream> #include <cstring> using namespace std; typedef struct { char fname; char lname; } fl; void see(fl...

Передать массив структур в функцию
Как это сделать? struct propriety { size_t dwIndex; }; int main() { propriety *Relevance = new propriety; Foo1(string...

5
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
14.07.2014, 20:48
код покажите
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
14.07.2014, 21:10
Лучший ответ Сообщение было отмечено phtnr как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct A
{
   int n;
};
void F(A* pA)
{
    pA[0].n=0;
}
int main()
{
  A a[2];
  F(a);
  system("pause");
  return 0;
}
Что не понятно?
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.07.2014, 21:16
Лучший ответ Сообщение было отмечено phtnr как решение

Решение

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
#include <iostream>
using namespace std;
 
struct sData{
    int val;
};
 
sData * MakeAdd(sData * Arr, int N, int val);
 
int main()
{
    int i;
    sData * Arr = new sData[256];
    cout<<"\tINPUT : "<<endl;
    for( i = 0; i < 16; i++ )
        cout<<"STRUCT # "<<i + 1<<" VAL : "<<(Arr[i].val = i)<<endl;
    Arr = MakeAdd(Arr, 8, -8);
    cout<<"\tOUTPUT : "<<endl;
    for( i = 0; i < 16; i++ )
        cout<<"STRUCT # "<<i + 1<<" VAL : "<<Arr[i].val<<endl;
    return 0;
}
 
sData * MakeAdd(sData * Arr, int N, int val)
{
    for( int i = 0; i < N; i++ )
        Arr[i].val += val;
    return Arr;
}
http://codepad.org/xNBoMyCR
INPUT :
STRUCT # 1 VAL : 0
STRUCT # 2 VAL : 1
STRUCT # 3 VAL : 2
STRUCT # 4 VAL : 3
STRUCT # 5 VAL : 4
STRUCT # 6 VAL : 5
STRUCT # 7 VAL : 6
STRUCT # 8 VAL : 7
STRUCT # 9 VAL : 8
STRUCT # 10 VAL : 9
STRUCT # 11 VAL : 10
STRUCT # 12 VAL : 11
STRUCT # 13 VAL : 12
STRUCT # 14 VAL : 13
STRUCT # 15 VAL : 14
STRUCT # 16 VAL : 15
OUTPUT :
STRUCT # 1 VAL : -8
STRUCT # 2 VAL : -7
STRUCT # 3 VAL : -6
STRUCT # 4 VAL : -5
STRUCT # 5 VAL : -4
STRUCT # 6 VAL : -3
STRUCT # 7 VAL : -2
STRUCT # 8 VAL : -1
STRUCT # 9 VAL : 8
STRUCT # 10 VAL : 9
STRUCT # 11 VAL : 10
STRUCT # 12 VAL : 11
STRUCT # 13 VAL : 12
STRUCT # 14 VAL : 13
STRUCT # 15 VAL : 14
STRUCT # 16 VAL : 15
1
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
15.07.2014, 20:36  [ТС]
Действительно, по значению достаточно просто. Но сейчас смотрю, большая идет на вход структура, хочу всеж через указатель.
-=ЮрА=- Спс, а почему с такими сложностями? То есть почему функция теперь возвращать должна поле структуры? Почему не получается сделать по аналогии с массивами, ведь как я понимаю структура в памяти размещается так же последовательно. Т.е. техническая часть вопроса тоже интересна
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.07.2014, 20:49
Цитата Сообщение от phtnr Посмотреть сообщение
То есть почему функция теперь возвращать должна поле структуры? Почему не получается сделать по аналогии с массивами, ведь как я понимаю структура в памяти размещается так же последовательно. Т.е. техническая часть вопроса тоже интересна
- Мне показалось что модификация массива структур по указателю будет не столь очевидна как с явным возвратом из функции, поэтому сделал с возвратом. Конечно же с массивом структур можно работать как с обычным массивом.

Добавлено через 3 минуты
phtnr, вот вариант с работой через указатель
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
#include <iostream>
using namespace std;
 
struct sData{
    int val;
};
 
void MakeAdd(sData * Arr, int N, int val);
 
int main()
{
    int i;
    sData * Arr = new sData[256];
    cout<<"\tINPUT : "<<endl;
    for( i = 0; i < 16; i++ )
        cout<<"STRUCT # "<<i + 1<<" VAL : "<<(Arr[i].val = i)<<endl;
    MakeAdd(Arr, 8, -8);
    cout<<"\tOUTPUT : "<<endl;
    for( i = 0; i < 16; i++ )
        cout<<"STRUCT # "<<i + 1<<" VAL : "<<Arr[i].val<<endl;
    return 0;
}
 
void MakeAdd(sData * Arr, int N, int val)
{
    for( int i = 0; i < N; i++ )
        Arr[i].val += val;
}
http://codepad.org/PlYPRlKS
INPUT :
STRUCT # 1 VAL : 0
STRUCT # 2 VAL : 1
STRUCT # 3 VAL : 2
STRUCT # 4 VAL : 3
STRUCT # 5 VAL : 4
STRUCT # 6 VAL : 5
STRUCT # 7 VAL : 6
STRUCT # 8 VAL : 7
STRUCT # 9 VAL : 8
STRUCT # 10 VAL : 9
STRUCT # 11 VAL : 10
STRUCT # 12 VAL : 11
STRUCT # 13 VAL : 12
STRUCT # 14 VAL : 13
STRUCT # 15 VAL : 14
STRUCT # 16 VAL : 15
OUTPUT :
STRUCT # 1 VAL : -8
STRUCT # 2 VAL : -7
STRUCT # 3 VAL : -6
STRUCT # 4 VAL : -5
STRUCT # 5 VAL : -4
STRUCT # 6 VAL : -3
STRUCT # 7 VAL : -2
STRUCT # 8 VAL : -1
STRUCT # 9 VAL : 8
STRUCT # 10 VAL : 9
STRUCT # 11 VAL : 10
STRUCT # 12 VAL : 11
STRUCT # 13 VAL : 12
STRUCT # 14 VAL : 13
STRUCT # 15 VAL : 14
STRUCT # 16 VAL : 15
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2014, 20:49
Помогаю со студенческими работами здесь

Передать двухмерный массив структур в функцию
Всем привет. Есть такой код - struct Array { float a; float b; }; void wr() {

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

Передать массив структур функции
Есть функция, принимает адрес 3d массива - func(char **). Строки обрабатывает... Нужный массив строк у меня в структуре: структура One, в...

Подскажите как передать в функцию данные массива структур, которые я ввожу с клавиатуры?
Подскажите как передать в функцию данные массива структур, которые я ввожу с клавиатуры?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru