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

Передача структуры по ссылке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.58
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 22:48     Передача структуры по ссылке #1
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как это можно безболезненно запихать в мой код


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
 
int kolvo_reisov();
int kolvoreisov(int);
void vvod_raspisaniya();
void zapros();
void vivod();
void povtor_zaprosa();
void body_of_main();
 
//char* v;
int y;
tm time1[100];
tm time2[100];
tm time3[100];
struct strc{
int a[100];//номер
char b[100];//тип автобуса
char c[100];//пункт назначения
}bus[100];
int f,i,j,h,k;
 
int kolvo_reisov()
{
cout << "vvedite kol-vo reisov"<<endl;
cin >> f;
return f;
}
 
int kolvoreisov(int f)
{
f = k;
return k;
}
 
void vvod_raspisaniya()
{
error:
kolvo_reisov();
 
for (i=0; i < f; i++)
{
bus[i].a[i] = 1+i;
cout << "vvedite tip avtobusa"<<endl;
cin >> bus[i].b;
cout << "vvedite punkt naznacheniya"<<endl;
cin >> bus[i].c;
cout << "vvedite vremya otpravleniya(hours(space)minutes)"<<endl;
cin >> time1[i].tm_hour >> time1[i].tm_min;
cout << "vvedite vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time2[i].tm_hour >> time2[i].tm_min;
}
 
for (i=0; i < f; i++)
{
    if( time1[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
        if(time1[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
            if(time2[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
                if(time2[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
    
    if(time2[i].tm_hour < time1[i].tm_hour)
    {
        cout << "vvedite raspisaniye pravilno" << endl;
    goto error;
    }
    else
    {
        if(time2[i].tm_hour == time1[i].tm_hour)
        {
        if(time2[i].tm_min <= time1[i].tm_min)
        {
            cout << "vvedite raspisaniye pravilno" << endl;
            goto error; 
        }
    }
}
}
}
 
void zapros()
{
errorr:
cout << "vvedite interesyUshee vas vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time3[1].tm_hour >> time3[1].tm_min;
 
if(time1[1].tm_hour> 23)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
if(time1[1].tm_min> 59)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
 
}
 
void vivod()
{
kolvoreisov(f);
j=0;
do
{
    if(time3[1].tm_hour < time2[j].tm_hour)
    {
    cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " " << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
    }
    else
    {
        if(time3[1].tm_hour == time2[j].tm_hour)
        {
        if(time3[1].tm_min <= time2[j].tm_min)
        {
                cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " "  << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
        }
    }
}
    j++;
}
while(j<f);
 
}
 
void povtor_zaprosa()
{
 
cout << "zhelayete li vi povtorit zapros(1-yes,2-no)?" << endl;
cin >> y;
if(y==1)
{
zapros();
vivod();    
}
if (y==2) getch();
cout<<"\n";
 
}
 
void body_of_main()
{
vvod_raspisaniya();
zapros();
vivod();
povtor_zaprosa();
}
 
int main ()
{
 
body_of_main();
//v = asctime(&time1[1]) ;
 
return 0;
}
условие задачи на всякий случай:
"В справочной автовокзала хранится расписание движения автобусов.
Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время
отправления и прибытия. Вывести информацию о рейсах, которыми можно
воспользоваться для прибытия в пункт назначения раньше заданного времени."
Использавать функции и передачу структыры по ссылке или указателюю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 22:48     Передача структуры по ссылке
Посмотрите здесь:

C++ Передача массива по ссылке
C++ Передача по ссылке
Передача параметра по ссылке C++
Передача объекта структуры по ссылке C++
Передача по константной ссылке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 22:53     Передача структуры по ссылке #2
А структура, описание её где?

Добавлено через 37 секунд
Не вижу слово
C++
1
struct
v.a.l.i.d
27.11.2012, 22:58
  #3

Не по теме:

Цитата Сообщение от Wolkodav Посмотреть сообщение
А структура, описание её где?
В 21 строчке затаилось

Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 22:59  [ТС]     Передача структуры по ссылке #4
строка 21
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:01     Передача структуры по ссылке #5
Ой блин, надо же было так заныкать, тьфу.
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 23:02  [ТС]     Передача структуры по ссылке #6
прости, я чайник)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11818 / 6797 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
27.11.2012, 23:12     Передача структуры по ссылке #7
Собственно, в какую функцию требуется передать переменную? И какую переменную
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 23:20  [ТС]     Передача структуры по ссылке #8
передать нужно структуру
C++
1
struct strc
в функцию ввода (код и так работает нужно просто сделать чтобы было как просит препод)
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:21     Передача структуры по ссылке #9
Блин я лох.
короче
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 SortBus(strc* A,int n)
{
}
 
void SortBus1(strc& A,int n)
{
}
 
void main()
{
strc A,
strc* B;
strc& G;
strc F[10];
int n=0;
SortBus(&A,n);
SortBus(B,n);
SortBus(*G,n);
SortBus(F,n);
SortBus1(A,n);
SortBus1(*B,n);
SortBus1(G,n);
}
И на будущее, сигнатуры функций, описание классов и структур, в заголовочный файл, реализация в .срр
И глобальные переменные по минимуму использовать!! Очень вредно.

Добавлено через 39 секунд
Вопросы)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11818 / 6797 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
27.11.2012, 23:24     Передача структуры по ссылке #10
Цитата Сообщение от Hammer-On Посмотреть сообщение
передать нужно структуру
может всё-таки переменную?
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 23:24  [ТС]     Передача структуры по ссылке #11
спасибо, сейчас разберусь что к чему)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
27.11.2012, 23:24     Передача структуры по ссылке #12
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
 
 
//Это вот структура
struct str {
 int x;
 int y;
};
 
//Это функция, принимающая ссылку на такую структуру и изменяющие её члены   
void f (str&);                                                             //
                                                                           //
                                                                           //
int main () {                                                              //
                                                                           //
  //Пока всё должно быть понятно, объявили переменную типа str и присвоили её
  //членам определённые значения.                                          //
  str str_;                                                                //
  str_.x= 10; str_.y= 20;                                                  //
  //ВЫведем значения str_ на экран                                         //
  printf ("str_x= %d      str_.y= %d\n", str_.x, str_.y);                  //
                                                                           //
  //теперь вызываем функцию f ()                                             
  f (str_);                                                                //
  //НУ вот, в функцию f передан УКАЗАТЕЛЬ на str_, то есть АДРЕС последней   
  //А кажется- будто сама переменная str_, но ни фига подобного            //
                                                                           //
  //Осталось посмотрет, изменились ли сами значения или нет:               //
  printf ("str_x= %d      str_.y= %d\n", str_.x, str_.y);                  //
  //Видим, что изменились                                                  //
  //Это говорит о том, что передача была ПО ССЫЛКЕ , то есть передавался     
  //только адрес str_, а казалось, что передаётся самао str_; это          //
  //я бы сказал, упрощение синтаксиса достигнуто было за счёт применения   ссылки
                                                                           //
  getchar ();                                                              //
  return 0;                                                                //
}                                                                          //
//                                                                           
 
 
                       //++++++++++++++++++++++++
                       //реализация функции f () 
                       //++++++++++++++++++++++++
 
void f (str& str_) {
 //Работает со структурой, как будто она передана не по ссылке, а по значению
 //то есть синтаксис обычный                                               //
 str_.x= 100;                                                              //
 str_.y= 200;                                                              //
 //А если бы передача была с помощью указателя, вот так: f (&str); тогда     
 //синтаксис был бы таким: str_->x; str_->y                                  
 //Вот и всё                                                                 
}
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 23:27  [ТС]     Передача структуры по ссылке #13
так, это ты мне в коде показал 3 способа как делать?)
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
27.11.2012, 23:28     Передача структуры по ссылке #14
Да, просто если разбираться с указателями и ссылками, то все и сразу, иначе смысла нету.
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
27.11.2012, 23:28  [ТС]     Передача структуры по ссылке #15
оу, и тебе спасибо) даже понятнее становится)
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
29.11.2012, 01:29  [ТС]     Передача структуры по ссылке #16
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
 
int kolvo_reisov();
int kolvoreisov(int);
void vvod_raspisaniya(strc&);
void vivod(strc&);
 
 
 
void zapros();
 
void povtor_zaprosa();
void body_of_main();
 
//char* v;
int y;
tm time1[100];
tm time2[100];
tm time3[100];
struct strc{
int a[100];//номер
char b[100];//тип автобуса
char c[100];//пункт назначения
};
 
int f,i,j,h,k;
 
int kolvo_reisov()
{
cout << "vvedite kol-vo reisov"<<endl;
cin >> f;
return f;
}
 
int kolvoreisov(int f)
{
f = k;
return k;
}
 
void vvod_raspisaniya(strc& bus)
{
error:
kolvo_reisov();
 
 
 
for (i=0; i < f; i++)
{
bus[i].a[i] = 1+i;
cout << "vvedite tip avtobusa"<<endl;
cin >> bus[i].b;
cout << "vvedite punkt naznacheniya"<<endl;
cin >> bus[i].c;
cout << "vvedite vremya otpravleniya(hours(space)minutes)"<<endl;
cin >> time1[i].tm_hour >> time1[i].tm_min;
cout << "vvedite vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time2[i].tm_hour >> time2[i].tm_min;
}
 
for (i=0; i < f; i++)
{
    if( time1[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
        if(time1[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
            if(time2[i].tm_hour>23)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
                if(time2[i].tm_min>59)
    {   cout << "vvedite raspisaniye pravilno" << endl;
        goto error;
    }
    
    if(time2[i].tm_hour < time1[i].tm_hour)
    {
        cout << "vvedite raspisaniye pravilno" << endl;
    goto error;
    }
    else
    {
        if(time2[i].tm_hour == time1[i].tm_hour)
        {
        if(time2[i].tm_min <= time1[i].tm_min)
        {
            cout << "vvedite raspisaniye pravilno" << endl;
            goto error; 
        }
    }
}
}
}
 
void zapros()
{
errorr:
cout << "vvedite interesyUshee vas vremya pribitiya(hours(space)minutes)"<<endl;
cin >> time3[1].tm_hour >> time3[1].tm_min;
 
if(time1[1].tm_hour> 23)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
if(time1[1].tm_min> 59)
    {   cout << "vvedite vremya pravilno" << endl;
        goto errorr;
    }
 
}
 
void vivod(strc& bus)
{
kolvoreisov(f);
j=0;
do
{
    if(time3[1].tm_hour < time2[j].tm_hour)
    {
    cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " " << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
    }
    else
    {
        if(time3[1].tm_hour == time2[j].tm_hour)
        {
        if(time3[1].tm_min <= time2[j].tm_min)
        {
                cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " "  << time1[j].tm_hour <<"."<< time1[j].tm_min <<" "<<time2[j].tm_hour<<"." <<time2[j].tm_min<<endl;
        }
    }
}
    j++;
}
while(j<f);
 
}
 
void povtor_zaprosa()
{
 
cout << "zhelayete li vi povtorit zapros(1-yes,2-no)?" << endl;
cin >> y;
if(y==1)
{
zapros();
vivod(bus); 
}
if (y==2) getch();
cout<<"\n";
 
}
 
void body_of_main()
{
vvod_raspisaniya(bus);
zapros();
vivod(bus);
povtor_zaprosa();
}
 
int main ()
{
    strc bus;
 
 
body_of_main();
//v = asctime(&time1[1]) ;
 
return 0;
}
1111.cpp(10) : error C2065: 'strc' : undeclared identifier
в чем проблема, подскажите пожалуйста

Добавлено через 55 секунд
объявление структуры строка 26
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
29.11.2012, 01:32     Передача структуры по ссылке #17
Ну. Объявление структуры в 26 строке, а структура используется уже в 11 строке. Компилятор о ней не в курсе в этом месте
Enflamed
 Аватар для Enflamed
2 / 2 / 0
Регистрация: 12.04.2015
Сообщений: 42
Завершенные тесты: 1
08.04.2016, 23:31     Передача структуры по ссылке #18
Доброго дня, вопрос по заплесневевшей теме:

А как я могу передать структуру по ссылке, если она у меня содержит экземпляр класса, например, string-овые переменные?
Экземпляры класса, по идее - это же просто ссылки, они всегда будут одинакового размера?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct data
{
    string name;
    string area;
    double SO2;
    double NOx;
    double losnm;
    double CO;
    double C;
    double NH3;
    double CH4;
    double total;
    string source;
    int year;
    double totallyWasted;
} date;
Вот её хочу передать в функцию и уже в этой функции изменять значения string name и все double'ы, чтобы не создавать новый экземпляр и не занимать память.
По возможности прошу написать пример
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2016, 01:06     Передача структуры по ссылке
Еще ссылки по теме:

C++ Передача по ссылке
Передача по ссылке C++
C++ Enum передача по ссылке

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

Или воспользуйтесь поиском по форуму:
Stitch Igorek
 Аватар для Stitch Igorek
44 / 44 / 17
Регистрация: 02.04.2016
Сообщений: 300
Завершенные тесты: 1
09.04.2016, 01:06     Передача структуры по ссылке #19
Цитата Сообщение от Enflamed Посмотреть сообщение
По возможности прошу написать пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct my_data
{
    string name;
    string area;
    double SO2;
    double NOx;
    double losnm;
    double CO;
    double C;
    double NH3;
    double CH4;
    double total;
    string source;
    int year;
    double totallyWasted;
};
 
void asd(my_data& a)
{
    a.name = "Name";
}
например так, просто название data уже есть где в стандартной библиотеке, и по этому компилятор ругается
Yandex
Объявления
09.04.2016, 01:06     Передача структуры по ссылке
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru