The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Передача по ссылке "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Передача по ссылке "  
Сообщение от niknik email(ok) on 07-Фев-09, 22:46 
HI all

Возник вопрос. Читаю очень интересную книгу "Священные знания  с++ " на стр.34
столкнулся со следующей проблемой.
Дана функция, задающая конкретный элемент двумерного массива
inline void foo(float *a, int m, int i, int j) {
  a[i*m+j] = a[i*m+j] * a[i*m+j] + a[i*m+j];    /// ошибка
}

так же имеется реализация этой функции со ссылкой
inline void foo(float *a, int m, int i, int j) {
   float &r = a[i*m + j ];
   r= r *r +r;
}

Так вот в книге сказано что в первом случае есть ошибка.
Не могу понять какая ?

Ps: Сильно не пинать

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Передача по ссылке "  
Сообщение от vic (??) on 09-Фев-09, 15:43 
>inline void foo(float *a, int m, int i, int j) {
>  a[i*m+j] = a[i*m+j] * a[i*m+j] + a[i*m+j]; /// ошибка
>}
>inline void foo(float *a, int m, int i, int j) {
>   float &r = a[i*m + j ];
>   r= r *r +r;
>}
>Так вот в книге сказано что в первом случае есть ошибка.
>Не могу понять какая ?

ыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыы)))
все просто до безобразия, вы читаете книгу на русском с кучей ошибок перевода и еще самовольными изменениями переводчика =))
вот как выглядит строка в оригинале:
a[i*m+j] = a[i*m+j] * a[i*m+i] + a[i*m+j];
внимание на индексы, второй множитель в оригинале с индесом i*m+i вместо i*m+j, поэтому читатель русской версии книги и не вдупляет т.к. переводчик самовольно поправил код :))

а в оригинале автор переходя к использованию ссылки показывает что таким образом можно:
1. предохраниться от подобных ошибок
2. "соптимизировать" чутка. во втором случае вместо четырехкратного вычисления индекса и обращения к элементу массива это делается один раз при инициализации ссылки. Надеюсь понятно почему в кавычках? ;)
3. элегантно отделил алгоритм функции от синтаксического мусора доступа к элементу массива. т.е. выделил важное.
0. автор мог бы пойти дальше и написать r += r * r; для полного счастья :))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Передача по ссылке "  
Сообщение от NikNik on 10-Фев-09, 15:32 
Спасибо  


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру