С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
avovana
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 85
1

Передача параметра по ссылке

15.10.2015, 16:48. Просмотров 826. Ответов 10
Метки нет (Все метки)

Здравствуйте!
Подскажите пожалуйста!
Делаю пример из книги:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
 
using namespace std;
 
 
double Fact(unsigned int& k)
{
if (k == 0)
 return 1;
return (k * Fact(--k));       
}
 
 
int main(void)
{
int n = 3;
int g = 101;
g = Fact(n);
 
getch();
return 0;
}
Здесь:
1) Передаем в функцию параметр по ссылки.
2) Уменьшаем этот параметр внутри.

Смысл, что внутри каждый раз k уменьшается и Fact(n) действительно выдаст 0.
Но после выполнения функции n=3!!!
n-же должна была тоже стать 0?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2015, 16:48
Ответы с готовыми решениями:

Передача параметра по ссылке
Всем доброго времени суток. Понимаю что вопрос покажется очень глупым, но я...

Передача параметра по ссылке
Всем здравствуйте. Други, помогите разобраться. Сидю :) вникаю в работу...

Передача параметра по константной ссылке - что это?
объясните мне пожалуйста что такое передача параметра в функцию по константной...

Как получить адрес параметра, передоваемого по ссылке?
подскажите как получить адрес параметра, передоваемого по ссылке? void f(int...

Передача по ссылке
С помощью функции rand() округлить значение double и передать его по ссылке.

10
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
15.10.2015, 16:54 2
Лучший ответ Сообщение было отмечено avovana как решение

Решение

n у вас имеет тип int
k у вас имеет тип uint
при приведении типов была создана нонейм переменная (копия n, но уже типа uint), которая и была уменьшена до 0.
1
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.10.2015, 16:56 3
Результат функции 6, а n = 0.

Добавлено через 45 секунд
Barrent, откуда такие сведения? У меня компилятор ошибку показал на этом месте.
1
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
15.10.2015, 17:01 4
Цитата Сообщение от nmcf Посмотреть сообщение
Barrent, откуда такие сведения? У меня компилятор ошибку показал на этом месте.
У меня тоже ошибку кидает, но раз у человека компилируется, то других вариантов я не вижу.
0
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.10.2015, 17:05 5
avovana, у тебя какой компилятор?
0
Renji
2129 / 1566 / 477
Регистрация: 05.06.2014
Сообщений: 4,549
15.10.2015, 17:05 6
Цитата Сообщение от avovana Посмотреть сообщение
return (k * Fact(--k));
Чтение и изменение переменной в пределах одной точки следования. Соответственно, значение левого аргумента * зависит от воли левой пятки компилятора (он может сначала прочитать k, потом выполнить --k. А может и наоборот). Используйте книгу в качестве источника кульков для семечек.
Цитата Сообщение от avovana Посмотреть сообщение
g = Fact(n);
Передача int, в функцию принимающую unsigned int&. Если это каким-то чудом скомпилировалось, то Fact работает не с n, а с ее временной копией.
1
avovana
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 85
15.10.2015, 17:06  [ТС] 7
Barrent, спасибо!
Действительно, убрал unsigned и всё заработало как надо!

Цитата Сообщение от nmcf Посмотреть сообщение
Результат функции 6, а n = 0.
Да, действительно, результат функции был 6, но была n = 3.

Сейчас и результат 0 и n = 3.

Добавлено через 49 секунд
Цитата Сообщение от nmcf Посмотреть сообщение
avovana, у тебя какой компилятор?
Который в Borland Builder 6.0
0
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.10.2015, 17:12 8
Я тоже подумал, что не следует k и --k использовать в одном выражении. И вообще тут ссылка не нужна, пусть по значению передаётся.

Добавлено через 42 секунды
avovana, что за книга?
0
avovana
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 85
15.10.2015, 17:20  [ТС] 9
Renji, nmcf, книга Лаптева В.В. - C++ (Экспресс курс) - 2004.

Добавлено через 1 минуту
Спасибо за полезные ответы!!!
0
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.10.2015, 17:24 10
Возьми свежую книгу. Там сверху тема про Литературу.
1
DrOffset
15.10.2015, 18:01     Передача параметра по ссылке
  #11

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
какой компилятор?
Какой бы ни был - он работает не по стандарту.
Кстати, описанный в теме случай - это именно та причина, по которой Страуструп запретил привязывать RVALUE к неконстантной ссылке.

0
15.10.2015, 18:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2015, 18:01
Привет! Вот еще темы с ответами:

Передача по ссылке
Здравствуйте. 1.typedef struct { MATRIXX_LENTA&lt;double&gt;* MATR; //Ленточная...

Передача по ссылке
В учебнике написано, что можно использовать функцию с левой стороны операции...

Передача структуры по ссылке
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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