Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
phtnr
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
#1

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

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

Не получается передать в функцию массив(одномерный, не динамический) из структур, ругается(. Без разницы по указателю, ссылке, значению.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2014, 20:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать массив структур в функцию (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
14.07.2014, 20:48 #2
код покажите
zss
Модератор
Эксперт С++
6361 / 5925 / 1921
Регистрация: 18.12.2011
Сообщений: 15,231
Завершенные тесты: 1
14.07.2014, 21:10 #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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;
}
Что не понятно?
-=ЮрА=-
Заблокирован
Автор FAQ
14.07.2014, 21:16 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
phtnr
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
15.07.2014, 20:36  [ТС] #5
Действительно, по значению достаточно просто. Но сейчас смотрю, большая идет на вход структура, хочу всеж через указатель.
-=ЮрА=- Спс, а почему с такими сложностями? То есть почему функция теперь возвращать должна поле структуры? Почему не получается сделать по аналогии с массивами, ведь как я понимаю структура в памяти размещается так же последовательно. Т.е. техническая часть вопроса тоже интересна
-=ЮрА=-
Заблокирован
Автор FAQ
15.07.2014, 20:49 #6
Цитата Сообщение от 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 20:49
Привет! Вот еще темы с ответами:

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла - C++
задача: передать динамический массив в функцию, и записать в каждый элемент строку из файла. количество строк известно вот что у меня...

Передача указателя на массив структур в функцию - C++
Здрвствуйте! Не могу сообразить почему вылетает segmentation fault в функции, inputDate при количестве элементов в массиве &gt;2 Если есть...

Передача указателя на массив структур в функцию и далее - C++
Не могу получить доступ к члеман массива структур, есть доступ только к первому члену массива. struct ABC { double a= 0; ...

Правильно ли передан указатель на массив структур в функцию? - C++
/*Учебная программулина*/ #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; struct newtype { char surname; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2014, 20:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru