Форум программистов, компьютерный форум, киберфорум
Наши страницы

Указатель и ссылка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обратная интерполяция Лагранжа http://www.cyberforum.ru/cpp-beginners/thread296033.html
Помогите пожалуйста нужно найти все значения х по заданному у=1.5 float x = {1,2,3,4,5}; float y = {1.35,-4,0.97,-2,7.2};
C++ Построение бинарного дерева на основе не бинарного В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще создавать эти деревья и что необходимо реализовать в задании. http://www.cyberforum.ru/cpp-beginners/thread296022.html
Текстовые файлы в С++ C++
Помогите написать программу которая определяет количество слов в каждой строке, и нужно сжать каждую строку, удалив все лишние пробелы
C++ Программа линейной и разветвленной структуры
есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин...
C++ Программы линейной и разветвленной структуры http://www.cyberforum.ru/cpp-beginners/thread295998.html
есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин...
C++ Программы линейной и разветвленной структуры в си++ есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин... подробнее

Показать сообщение отдельно
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
15.05.2011, 15:55  [ТС]
Если не сложно, разжуйте по пункту 3 что происходит когда функция void ch1 (int*& pa1) получает pa.

Адрес безымянной переменной не меняется, к значению pa1 прибавляем 10, т.к. значение pa было 5, cout выдает значение 15.

Тогда возникает вопрос, если функция void ch1 (int*& pa1) меняет значение безымянной переменной и функция void ch1 (int* pa1) тоже меняет значение безымянной переменной, и в обоих случаях адреса остаются неизменными, в чем разница между этими функциями?

Добавлено через 11 минут
Цитата Сообщение от Evg Посмотреть сообщение
По поводу пункта 3.

Вызов функции ch1(pa) раздублируй (т.е. поставь чтобы два раза подряд вызвалась одна и та же функция). В конце функции ch1 поставь код pa1 = NULL; Запусти пример. Сравни результат работы в вариантах "void ch1 (int *pa1)" и "void ch1 (int& *pa1)" (т.е. с ссылкой и без ссылки)

Если увидишь разницу, но не поймёшь причину, то проблема скорее всего будет из-за того, что закипает мозг из-за комбинации указателя с ссылкой. В таком случае удобно поступать так, что делается typedef и вся работа с указателем заменяется на typedef. Типа вместо

C
1
2
3
4
5
void ch1 (int *pa1)
{
        *pa1=*pa1+10;
        cout<<"pa1="<<*pa1<<endl;
}
написать

C
1
2
3
4
5
6
typedef int* addr_t;
void ch1 (addr_t pa1)
{
        *pa1=*pa1+10;
        cout<<"pa1="<<*pa1<<endl;
}
Но заменить надо ВЕЗДЕ, чтобы эта несчастная звёздочка не мельтешила перед глазами, а перед глазами была более понятная конструкция addr_t
Если я не ошибаюсь, в 3 пункте можно изменять и адрес и значение безымянной переменной, а в первом ТОЛЬКО ее значение?
Т.е. по ссылке передается адрес указателя, тогда не совсем ясно почему сначало надо писать * а потом &
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.