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

Реализация программы с использованием ссылок и указателей - C++

Восстановить пароль Регистрация
 
Harmonster
9 / 9 / 3
Регистрация: 20.05.2012
Сообщений: 101
22.11.2013, 15:30     Реализация программы с использованием ссылок и указателей #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
#include <iostream>
using namespace std;
 
void max_min(float x, float y, float z, float *mini, float *maxi);
void finding(float n, float *first, float *last);
void max_min(float x, float y, float z, float &max1, float &min1);
void finding(float n, float &first, float &last);
 
void max_min(float x, float y, float z, float *mini, float *maxi)
{
    if (y > *maxi)
        *maxi = y;
    else
        *mini = y;
    if (z > *maxi)
        *maxi = z;
    else
        *mini = z;
}
 
void finding(float n, float *first, float *last)
{
    if (n > 10)
    {
        *last = n % 10;
        while (n > 10)
        {
            *first = n / 10;
            n = n / 10;
        }
    }
    else
    {
        *last = n;
        *first = n;
    }
}
 
void max_min(int x, int y, int z, int &max, int &min)
{
    if (y > max)
        max = y;
    else
        min = y;
    if (z > max)
        max = z;
    else
        min = z;
}
 
void finding(int n, int &first, int &last)
{
    if (n > 10)
    {
        last = n % 10;
        while (n > 10)
        {
            first = n / 10;
            n = n / 10;
        }
    }
    else
    {
        last = n;
        first = n;
    }
}
 
int main()
{
    setlocale (LC_ALL, "Russian");
    float min, max, x, y, z, n;
    cout << "X: ";
        cin >> x;
    cout << "Y: ";
        cin >> y;
    cout << "Z: ";
        cin >> z;
    cout << "Число: ";
    cin >> n;
    min = x;
    max = x;
    float &max1 = x, &min1 = y;
    float first = 0, last = 0;
    max_min(x, y, z, &min, &max); //указатель
    max_min(x, y, z, max1, min1); //ссылка
    finding(n, &first, &last); //указатель
    finding(n, first, last); //ссылка
    cout << "Минимальное:  " << min << "\n" << "Максимальное: " << max << endl;
    cout << "Первая цифра: " << first << endl;
    cout << "Последняя цифра: " << last << endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
22.11.2013, 15:39     Реализация программы с использованием ссылок и указателей #2
ну сделай чтобы все аргументы были ссылками или указателями.
Pro100Tom
 Аватар для Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 325
05.06.2014, 00:43     Реализация программы с использованием ссылок и указателей #3
Здрасьте! Объясните пожалуйста, как именно работает вот такой код
C++
1
2
int firstValue = 2;
int& secondValue = firstValue;
Я знаю, что при изменении значения любой из этих переменных, изменяются обе, так как у них один адрес. Подскажите, как понять этот код? Вот с указателями еще более менее понятно. Указатель
C++
1
int* myPointer;
хранит адрес переменной и через него можно изменить ее значение
C++
1
*myPointer = 3;
А что такое
C++
1
int& secondValue;
Это, не просто тип integer, и это так же не указатель. В книге C++ for Dummies есть пример на эту тему, но я не понимаю, всё равно толком. Скинул скрин этой страницы.
Миниатюры
Реализация программы с использованием ссылок и указателей  
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
05.06.2014, 00:48     Реализация программы с использованием ссылок и указателей #4
Pro100Tom, http://ru.wikipedia.org/wiki/%D1%F1%...A%E0_%28C++%29
Pro100Tom
 Аватар для Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 325
05.06.2014, 16:16     Реализация программы с использованием ссылок и указателей #5
Боже мой, а как же принцип KISS..? Это так запутанно... Спасибо за вики, туда я чего-то не додумался сам глянуть.

Добавлено через 15 часов 21 минуту
Более менее разобрался. Но всё еще не понимаю такую запись
C++
1
int& myValue = *new int;
Почему нужна звездочка? Как это вообще читается-то? Как я понял мы создаем ссылку на место, где будет находиться какой-то объект, но его там нет. Везде пишут, что ссылка не может не указывать на объект. Потом, как я могу поместить значение именно вот в ту ячейку памяти? Мне нужно будет брать адрес переменной myValue для этого? И еще вопрос: пишут, что в производительности разницы на сегодняшний день никакой между использованием ссылок и указателей нет. Но я не понимаю, указатель весит всегда 4 байта или сколько там, независимо от объекта, на который этот указатель указывает. Но ссылка? Ссылка ведь абсолютно новая переменная или объект с одинаковым адресом, а значит и значенем как в переменной/объекте, на которую/ый эта ссылка ссылается, а значит весит всегда по-разному. Разтолкуйте новичку пожалуйста. Заранее спасибо.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
05.06.2014, 17:12     Реализация программы с использованием ссылок и указателей #6
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Почему нужна звездочка?
Потому что new возвращает адрес объекта, а ссылка создается на объект, на который указывает этот адрес .
* в данном контексте разыменование указателя, т.е. получение объекта по его адресу.

http://cplus-plus-ru.blogspot.ru/201...g-post_18.html

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Как я понял мы создаем ссылку на место, где будет находиться какой-то объект, но его там нет
Почему это нет? new его создает.

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Потом, как я могу поместить значение именно вот в ту ячейку памяти?
myValue = 10;

к примеру.

Но лично я за обсуждаемую конструкцию вырывал бы руки.

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Но ссылка? Ссылка ведь абсолютно новая переменная или объект с одинаковым адресом
Ссылка - просто другое имя того же объекта. Алиас. Поскольку как правильно замечено - адрес у него тот же.

http://ru.wikibooks.org/wiki/%D0%A1%...BB.D0.BA.D0.B5
Pro100Tom
 Аватар для Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 325
06.06.2014, 17:09     Реализация программы с использованием ссылок и указателей #7
Спасибо большое. Только теперь допёр. Я не знал просто, что new возвращает что-то.

Добавлено через 2 минуты
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Но лично я за обсуждаемую конструкцию вырывал бы руки.
Потому что вместо этого
C++
1
2
int& myValue = *new int;
myValue = 10;
гораздо проще написать так?
C++
1
int myValue = 10;
Добавлено через 7 минут
А как тогда понять вот такой код в C# правда.
C#
1
List<int> myList = new List<int>();
Получается, что List<int> -это указатель?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
06.06.2014, 20:27     Реализация программы с использованием ссылок и указателей #8
Цитата Сообщение от Pro100Tom Посмотреть сообщение
вот такой код в C# правда.
и причем тут C++? Это разные языки и организованы они по разному.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
06.06.2014, 20:30     Реализация программы с использованием ссылок и указателей #9
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Получается, что List<int> -это указатель?
не знаю С#, но осмелюсь предположить, что это ссылка, т.к. в Java это ссылка, а C#, как известно, это Java в руках MS.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2014, 07:43     Реализация программы с использованием ссылок и указателей
Еще ссылки по теме:

Ступор в возврате указателей и ссылок C++
Программы с использованием динамических массивов и указателей C++
C++ Демонстрация работы ссылок, указателей или дескрипторов

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

Или воспользуйтесь поиском по форуму:
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.06.2014, 07:43     Реализация программы с использованием ссылок и указателей #10
Цитата Сообщение от Pro100Tom Посмотреть сообщение
А как тогда понять вот такой код в C# правда.
В C++ это ошибка, а C# я практически не использую.
Yandex
Объявления
07.06.2014, 07:43     Реализация программы с использованием ссылок и указателей
Ответ Создать тему
Опции темы

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