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

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

Войти
Регистрация
Восстановить пароль
 
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
#1

Ссылка на структуру - C++

10.07.2012, 15:45. Просмотров 975. Ответов 4
Метки нет (Все метки)

Рассматривал пример из книги Праты. Раздел про ссылки на структуры. В книжке был приведён пример, код примера можно увидеть ниже. У меня возник вопрос для чего нужен этот значек в прототипе и определении функции (выделен красным) const sysop & use (sysop & sysopref); Далее в книге этого не было разъяснено. Я убрал этот значек из прототипа и определения: результат работы программы остался тем же. Поясните плз

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
#include <iostream>
using namespace std;
struct sysop
{
    char name [26];
    char quote [64];
    int used;
};
const sysop & use (sysop & sysopref);
 
int main ()
{
    setlocale (LC_ALL, "Russian");
    sysop looper =
    {
        "Рик Цикличный",
        "Я выполняю переходы",
        0
    };
    use (looper);
    cout << "Looper: " << looper.used << "вызов(а)\n";
    sysop copycat;
    copycat = use (looper);
    cout << "Looper: " << looper.used << "вызов(а)\n";
    cout << "Copycat: " << copycat.used << "вызов(а)\n";
    cout << "use(looper): " << use(looper).used << "вызов(а)\n";
    for (int i = 0; i<100; i++)
        cin.get();
    return 0;
}
const sysop & use (sysop & sysopref)
{
    cout << sysopref.name << " говорит:\n";
    cout << sysopref.quote << endl;
    sysopref.used++;
    return sysopref;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 15:45     Ссылка на структуру
Посмотрите здесь:

Не работает ссылка на структуру - C++
Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; ...

Ссылка на структуру с ссылками - C++
Не знаю в чем сложность, но неожиданно проблема Идея такова: есть структура vertex с координатами (ссылки) В дальнейшем появляется...

Ссылка на структуру внутри класса - C++
Программлю на с++ второй день нужно определить указатель на структуру и проинициализировать указатель. Код вот: typedef volatile...

Ссылка на указатель - C++
Привет всем, пишу класс реализующий стек, объявил вершину стека как приватный элемент. Написал метод Push - который должен добавить в...

Ссылка на файл - C++
Приветствую всех. У меня небольшой вопрос... Есть код: g_hInputFile = CreateFile( (LPCWSTR)&quot;C://a.txt&quot;, ...

Константная ссылка - C++
Один из уважаемых мне людей сказал, что в &quot;Дизайн и эволюция С++&quot; писали, что круто писать void fn( T&amp; const name ) Как по мне это...

Ссылка и Разыменование в с++ - C++
прошу кто можеть дать видеоурок(или что угодно) на эту тему.я очень затрудняюсь понят это.нужно много примеров из самого примитива до...

Указатель и ссылка - C++
Помогите понять, немного запутался. #include&lt;iostream&gt; using namespace std; void ch1 (int *pa1); int main() {

Указатель и ссылка - C++
В общем вопрос достаточно простой, в чём разница указателя и сылки? С одной стороны указатель это отдельный тип, отдельная ячейка в...

неопределенная ссылка - C++
Некомпилируется проект. Не могу понять где ошибка. prata-10-2-head.h #ifndef PRATA-10-2-HEAD_H_INCLUDED #define...

Ссылка на указатель - C++
Почему не работает такая конструкция? void SwapInt(void* p1, void* p2) { int* &amp; tmp=static_cast&lt;int*&gt;(p2); } и как...

Ссылка на указатель - C++
Задам, скорее всего, глупый вопрос, однако хотелось бы разобраться. // ... { int *ptr = new int; int &amp;x = *ptr; } ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
10.07.2012, 17:47     Ссылка на структуру #2
Цитата Сообщение от Fooly Посмотреть сообщение
Рассматривал пример из книги Праты. Раздел про ссылки на структуры. В книжке был приведён пример, код примера можно увидеть ниже. У меня возник вопрос для чего нужен этот значек в прототипе и определении функции (выделен красным) const sysop & use (sysop & sysopref); Далее в книге этого не было разъяснено. Я убрал этот значек из прототипа и определения: результат работы программы остался тем же. Поясните плз

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
#include <iostream>
using namespace std;
struct sysop
{
    char name [26];
    char quote [64];
    int used;
};
const sysop & use (sysop & sysopref);
 
int main ()
{
    setlocale (LC_ALL, "Russian");
    sysop looper =
    {
        "Рик Цикличный",
        "Я выполняю переходы",
        0
    };
    use (looper);
    cout << "Looper: " << looper.used << "вызов(а)\n";
    sysop copycat;
    copycat = use (looper);
    cout << "Looper: " << looper.used << "вызов(а)\n";
    cout << "Copycat: " << copycat.used << "вызов(а)\n";
    cout << "use(looper): " << use(looper).used << "вызов(а)\n";
    for (int i = 0; i<100; i++)
        cin.get();
    return 0;
}
const sysop & use (sysop & sysopref)
{
    cout << sysopref.name << " говорит:\n";
    cout << sysopref.quote << endl;
    sysopref.used++;
    return sysopref;
}
Амперсанд (&) используется для получения адреса переменной или для передачи параметров по ссылке, или для создания нового имени для некоторого блока памяти (ссылочной переменной), т.е :
1)
C++
1
2
 int k = 10;
int *p = &k;
Теперь указатель указывает на k
2)
C++
1
2
3
4
5
6
7
8
9
10
void MyFunc(int &y)
{
y++;
}
void main()
{
...
int x = 10;
MyFunc(x);
printf("%d", x);// выведет 11, так как в функцию передали переменную по ссылке, а именно сработало примерно так int &y = x; ниже пояснение
3)
C++
1
2
3
4
5
6
7
int x = 10;
int &y = x;
y++;
//x = 11 и y = 11.
int *p = &x;
(*p)++;
// х = 12, y = 12, ибо обе переменные указывают на один блок памяти
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
10.07.2012, 18:11  [ТС]     Ссылка на структуру #3
Цитата Сообщение от nexen Посмотреть сообщение
Амперсанд (&) используется для получения адреса переменной или для передачи параметров по ссылке, или для создания нового имени для некоторого блока памяти (ссылочной переменной)
А в моём примере зачем конкретно нужен этот первый амперсанд?
kent
Нуб со стажем
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
10.07.2012, 18:19     Ссылка на структуру #4
Fooly, чтобы показать, что мы не копию sysopref возвращаем, а непосредственно sysopref
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
10.07.2012, 18:22     Ссылка на структуру #5
Цитата Сообщение от Fooly Посмотреть сообщение
А в моём примере зачем конкретно нужен этот первый амперсанд?
В твоем случае это никак на ход работы не повлияет. В принципе и const можно удалить.
Здесь она просто не создает никаких копий, а возвращает именно то "допольнительное имя" (заметь кавычки)
Yandex
Объявления
10.07.2012, 18:22     Ссылка на структуру
Ответ Создать тему
Опции темы

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