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

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

27.11.2012, 22:48. Показов 17999. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как это можно безболезненно запихать в мой код


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;
}
условие задачи на всякий случай:
"В справочной автовокзала хранится расписание движения автобусов.
Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время
отправления и прибытия. Вывести информацию о рейсах, которыми можно
воспользоваться для прибытия в пункт назначения раньше заданного времени."
Использавать функции и передачу структыры по ссылке или указателюю
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2012, 22:48
Ответы с готовыми решениями:

Передача объекта структуры по ссылке
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как...

Передача массива как члена структуры по ссылке в функцию
Всем привет! Выделил суть проблемы. Создаю структуру, в ней массив, передаю структурную переменную в ф-цию по ссылке и забиваю...

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

18
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
27.11.2012, 22:53
А структура, описание её где?

Добавлено через 37 секунд
Не вижу слово
C++
1
struct
1
27.11.2012, 22:58

Не по теме:

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

1
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 22:59  [ТС]
строка 21
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
27.11.2012, 23:01
Ой блин, надо же было так заныкать, тьфу.
1
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:02  [ТС]
прости, я чайник)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
27.11.2012, 23:12
Собственно, в какую функцию требуется передать переменную? И какую переменную
1
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:20  [ТС]
передать нужно структуру
C++
1
struct strc
в функцию ввода (код и так работает нужно просто сделать чтобы было как просит препод)
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
27.11.2012, 23:21
Блин я лох.
короче
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 секунд
Вопросы)
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
27.11.2012, 23:24
Цитата Сообщение от Hammer-On Посмотреть сообщение
передать нужно структуру
может всё-таки переменную?
1
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:24  [ТС]
спасибо, сейчас разберусь что к чему)
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
27.11.2012, 23:24
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                                  
 //Вот и всё                                                                 
}
2
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:27  [ТС]
так, это ты мне в коде показал 3 способа как делать?)
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
27.11.2012, 23:28
Да, просто если разбираться с указателями и ссылками, то все и сразу, иначе смысла нету.
1
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
27.11.2012, 23:28  [ТС]
оу, и тебе спасибо) даже понятнее становится)
0
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 41
29.11.2012, 01:29  [ТС]
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
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
29.11.2012, 01:32
Ну. Объявление структуры в 26 строке, а структура используется уже в 11 строке. Компилятор о ней не в курсе в этом месте
1
 Аватар для Enflamed
3 / 3 / 1
Регистрация: 12.04.2015
Сообщений: 74
08.04.2016, 23:31
Доброго дня, вопрос по заплесневевшей теме:

А как я могу передать структуру по ссылке, если она у меня содержит экземпляр класса, например, 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'ы, чтобы не создавать новый экземпляр и не занимать память.
По возможности прошу написать пример
0
 Аватар для Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
09.04.2016, 01:06
Цитата Сообщение от 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 уже есть где в стандартной библиотеке, и по этому компилятор ругается
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2016, 01:06
Помогаю со студенческими работами здесь

Передача по ссылке
Задание №8 из книги &quot;Объектно-ориентированное программирование в С++&quot;, 4-е издание, Роберт Лафоре, 2004г. В некоторых компьютерных...

Передача по ссылке
Здравствуйте. 1.typedef struct { MATRIXX_LENTA&lt;double&gt;* MATR; //Ленточная матрица } DATA_LENTA, *PDATA_LENTA; DWORD WINAPI...

Передача по ссылке
С помощью функции rand() округлить значение double и передать его по ссылке.

Передача указателя по ссылке
Так печатается &quot;12&quot; #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void somefunction(int*&amp;); int...

Передача параметров по ссылке
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке? Т.е. вместо void doSomething(const int _count, const...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru