Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2

Изменение значений переменных по ссылке и по указателю

01.08.2016, 13:58. Показов 8694. Ответов 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
24
25
26
27
28
29
30
31
#include <iostream>
 
// use: swap1(one, two);
void swap1(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;
}
 
// use: swap2(&one, &two);
void swap2(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
 
int main()
{
    int one = 101;
    int two = 234;
 
    std::cout << one << " | " << two << std::endl;
    swap1(one, two);
    std::cout << one << " | " << two << std::endl;
    swap2(&one, &two);
    std::cout << one << " | " << two << std::endl;
    
    return 0;
}
Какой когда использовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2016, 13:58
Ответы с готовыми решениями:

Передача значений переменных или ссылок, неконтролируемое изменение переменных
// заголовок класса ObservableCollection&lt;LineDom&gt; Method1; Method1 = new ObservableCollection&lt;LineDom&gt;(); ...

Изменение значений переменных
Как поменять значения переменных a и b используя описанный ниже метод set? import java.lang.Math; public class HelloWorld { ...

Изменение значений переменных
Есть функция. void drawgraphic(double min_x, double max_x) { double min_y = 1000000.0, max_y = -1000000.0; double x = 0, dx =...

21
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.08.2016, 14:01
Цитата Сообщение от dailydose Посмотреть сообщение
Какой когда использовать?
Если не ожидаете отсутствие объекта, то первый.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.08.2016, 14:04
Лучший ответ Сообщение было отмечено dailydose как решение

Решение

Цитата Сообщение от dailydose Посмотреть сообщение
Какой когда использовать?
первый. всегда.

http://rextester.com/EHQP53873
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
#include <iostream>
 
// use: swap1(one, two);
void swap1(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;
}
 
// use: swap2(&one, &two);
void swap2(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
 
int main()
{
    int one = 101;
    int two = 234;
 
    std::cout << one << " | " << two << std::endl;
    swap1(one, two);
    std::cout << one << " | " << two << std::endl;
    swap2(nullptr, nullptr);
    std::cout << one << " | " << two << std::endl;
    
    return 0;
}
1
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
01.08.2016, 14:07
Цитата Сообщение от dailydose Посмотреть сообщение
Есть два способа изменить значения переменных
Не изменить, а обменять. Для встроенных типов и практически всех классов что есть в std, вполне подойдет std::swap. Для пользовательских типов надо будет реализовать свой swap и параметр передавать по не константной ссылке.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.08.2016, 14:16
Цитата Сообщение от notAll Посмотреть сообщение
по не константной ссылке
на языке с++ не существует никаких константных ссылок:
http://rextester.com/KHBI64199
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
    
    int v = 10;
    
    
    const int& r = v;
    
    
    if(std::is_const<decltype(r)>::value)
        std::cout <<"r - константная ссылка\n";
    else
        std::cout <<"на языке с++ не существует никаких константных ссылок\n";
}
вывод:
Hello, world!
на языке с++ не существует никаких константных ссылок
2
01.08.2016, 14:20

Не по теме:

Хорошо, ссылка на не константный тип данных.

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
01.08.2016, 14:22
hoggy, попахивает придирками к словам...)

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.08.2016, 14:23
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
попахивает придирками к словам
к смыслу.
ну или объясняйте свои придирки шаблонам с++.
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
01.08.2016, 16:14
Опасность! В коде и выводе преобладает игра слов.

hoggy,

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
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
 
    int v = 10;
 
    const int* r = &v;
    const int* const r2 = &v;
    const int& r3 = v;
//  const int& const r4 = v;//тоска беда:( константных ссылок и правда не существует, а точнее они все "константные"
 
    if (std::is_const<decltype(r)>::value)
        std::cout << "r - константный указатель\n";
    else
        std::cout
                << "на языке с++ не существует никаких константных указателей\n";
 
    if (std::is_const<decltype(r2)>::value)
        std::cout << "r2 - константный указатель\n";
    else
        std::cout
                << "на языке с++ не существует никаких константных указателей\n";
 
    if (std::is_const<decltype(r3)>::value)
        std::cout << "r2 - константная ссылка\n";
    else
        std::cout
                << "на языке с++ не существует никаких константных ссылок\n";
}
Вывод:
Hello, world!
на языке с++ не существует никаких константных указателей
r2 - константный указатель
на языке с++ не существует никаких константных ссылок
Т.е. это такой себе пример. Ибо is_const проверяет константность верхнего уровня.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
01.08.2016, 16:30
int - это тип, int* - и это тип, const int* - это тоже тип, к любому подставьте const и будет "константный" тип, int& - это не тип (в том понимании, что на него нельзя взять указатель и нельзя на него ссылаться), это ссылка на тип, как и const int&

Добавлено через 2 минуты
Цитата Сообщение от Nosey Посмотреть сообщение
Ибо is_const проверяет константность верхнего уровня.
Или проще говоря, константность того типа что мы передали.
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.08.2016, 16:33
Цитата Сообщение от Operok Посмотреть сообщение
в том понимании, что на него нельзя взять указатель и нельзя на него ссылаться
А с каких пор у типа появился адрес?
Цитата Сообщение от Operok Посмотреть сообщение
int& - это не тип
Это тип, прикиньте. Если быть точнее - составной тип
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
01.08.2016, 16:36
Ну началось опять...
3
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
01.08.2016, 16:45
Ferrari F1, ну не все же сумму элементов массива считать

Народный фольклор про АТД (хотя это здесь не в тему, просто ассоциации ):
Ехал тип через тип
Видит тип - тип в тип
Сунул тип тип в тип
Тип тип тип тип!...
2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.08.2016, 17:10
делделдел
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
01.08.2016, 19:18  [ТС]
Цитата Сообщение от notAll Посмотреть сообщение
Не изменить, а обменять.
не суть.
можно было для примера привести и вот так:
C++
1
2
3
4
5
6
7
8
void foo(int& bar)
{
bar = 10125;
}
void foo2(int* bar)
{
*bar = 5213951;
}
Добавлено через 5 минут
Цитата Сообщение от hoggy Посмотреть сообщение
первый. всегда.
тем не менее встречаются функции второго типа, например:
C++
1
2
DWORD windowProcessId = 0;
GetWindowThreadProcessId(windowHandle,&windowProcessId);
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.08.2016, 19:21
Лучший ответ Сообщение было отмечено dailydose как решение

Решение

Цитата Сообщение от dailydose Посмотреть сообщение
тем не менее встречаются функции второго типа, например
Потому что они Си'шные, а в Си нет ссылок.

В C++ также это можно использовать, но зачем?

Например, есть функция stoi, как видим, первый параметрт - ссылка, а не указатель, а второй параметр - указатель. Почему?
Потому что во втором параметре может быть передан nullptr, что "скажет" функции о том, что данный объект не нужно использовать.

Как я уже писал
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Если не ожидаете отсутствие объекта, то первый.
в данном случае первый параметр - всегда ожидает объект, тогда как второй допускает отсутствие объекта (передали nullptr).
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
01.08.2016, 19:23
HelicopterK52, весь win api целиком написан на сях? даже api современных форточек*?
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.08.2016, 19:28
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
даже api современных форточек*?
Что это меняет? Экспортировать всё равно придется Си'шный интерфейс.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
01.08.2016, 19:31
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Что это меняет? Экспортировать всё равно придется Си'шный интерфейс.
Я с win api знаком как Убежденный знаком с haskell, поэтому думал, что при развитии семейства этих ОС api сперва дополнялся новыми функциями, а потом(в более новых версиях винды) переписывался на плюсах с использованием его возможностей
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.08.2016, 20:46
Цитата Сообщение от dailydose Посмотреть сообщение
тем не менее встречаются функции второго типа, например:
так это язык си.
там ссылок нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2016, 20:46
Помогаю со студенческими работами здесь

Изменение значений переменных
Даны две переменные x и у. Если значения обеих переменных больше 0, то переменной х присвоить значение квадратного корня из х, а переменной...

Изменение значений переменных сессий
Доброго дня, Всем! Есть необходимость запоминать состояние элемента на сайте. На главной странице есть баннер. Я его скручиваю, а при...

Изменение значений переменных (интерпретатор)
А вот еще одна проблемка подъехала... Если вы видели мою прошлую тему, вы знаете что я делал интерпретатор, и спрашивал основы работы с...

Изменение значений переменных в другом приложении
Здравствуйте, форумчане) Тут такой вопрос возник : В Ida Pro декомпилирую файл, там есть значения, для которых нужно написсать программу...

Изменение значений переменных из родительского в классе наследника
Добрый день. Есть два класса Class1 и Class2. В Class2 я прописал typedef Class1 base; И обращаюсь к его переменным из Class2 как...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru