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

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

Восстановить пароль Регистрация
 
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
10.07.2012, 15:45     Ссылка на структуру #1
Рассматривал пример из книги Праты. Раздел про ссылки на структуры. В книжке был приведён пример, код примера можно увидеть ниже. У меня возник вопрос для чего нужен этот значек в прототипе и определении функции (выделен красным) 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++
C++ Ссылка на указатель
Не работает ссылка на структуру C++
Ссылка и Разыменование в с++ C++
C++ Указатель и ссылка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
10.07.2012, 18:11  [ТС]     Ссылка на структуру #3
Цитата Сообщение от nexen Посмотреть сообщение
Амперсанд (&) используется для получения адреса переменной или для передачи параметров по ссылке, или для создания нового имени для некоторого блока памяти (ссылочной переменной)
А в моём примере зачем конкретно нужен этот первый амперсанд?
kent
Нуб со стажем
 Аватар для 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     Ссылка на структуру
Ответ Создать тему
Опции темы

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