Russian Qt Forum
Ноябрь 24, 2024, 09:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Передача параметров/аргументов  (Прочитано 17991 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Август 29, 2009, 13:27 »

Добрый день

struct Matrix {
  double m[4][4];
};

void InvertMatrix( Matrix * theInvertedMatrix, Matrix theSourceMatrix );

Почему программист выбрал такой способ передачи параметров?
Записан
BRE
Гость
« Ответ #1 : Август 29, 2009, 13:36 »

Добрый день

struct Matrix {
  double m[4][4];
};

void InvertMatrix( Matrix * theInvertedMatrix, Matrix theSourceMatrix );

Почему программист выбрал такой способ передачи параметров?
Я так понимаю, что это C.

Думаю программист хотел указать, что исходная (theSourceMatrix) в функции не изменяется, в отличии от результирующей (theInvertedMatrix).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 29, 2009, 13:43 »

Я так понимаю, что это C.

typedef struct {
  double m[4][4];
} Matrix;

Вот это было бы "С"  Улыбающийся

Думаю программист хотел указать, что исходная (theSourceMatrix) в функции не изменяется, в отличии от результирующей (theInvertedMatrix).
Тогда почему не

void InvertMatrix( Matrix * theInvertedMatrix, const Matrix4 * theSourceMatrix );

?
Записан
BRE
Гость
« Ответ #3 : Август 29, 2009, 13:49 »

Тогда почему не

void InvertMatrix( Matrix * theInvertedMatrix, const Matrix4 * theSourceMatrix );

?
Вот уж не знаю, это скрыто в голове того программиста. Улыбающийся
Я бы вообще скорее всего так объявил:
void InvertMatrix( Matrix &theInvertedMatrix, const Matrix &theSourceMatrix );
Записан
BRE
Гость
« Ответ #4 : Август 29, 2009, 13:52 »

Часто бывает, что используются куски кода из других библиотек. Вполне возможно программист просто перенес функции работы с матрицами из одной из таких библиотек к себе в проект...  Непонимающий
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Август 29, 2009, 14:01 »

>>void InvertMatrix( Matrix &theInvertedMatrix, const Matrix &theSourceMatrix );
А вот в Си, по ссылке ещё нельзя передавать, это стало возможно в С++

>>Вот это было бы "С"
Первым способом многие компиляторы едят.
Записан

Юра.
spectre71
Гость
« Ответ #6 : Август 29, 2009, 14:06 »

Код
C
void InvertMatrix( Matrix * theInvertedMatrix, Matrix theSourceMatrix ) {
 ...
 ...
 *theInvertedMatrix = theSourceMatrix;
}
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Август 29, 2009, 14:36 »

Часто бывает, что используются куски кода из других библиотек. Вполне возможно программист просто перенес функции работы с матрицами из одной из таких библиотек к себе в проект...  Непонимающий
Ничего он не переносил, программист классный (хоть и из Колорадо). Конечно. можно написать как Вы или я предложили. Но у него сделано проще и лучше.
Записан
spectre71
Гость
« Ответ #8 : Август 29, 2009, 15:13 »

Ну и какой здесь скрытый смысл?
Ради какой оптимизации это сделано?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Август 29, 2009, 15:48 »

Ну и какой здесь скрытый смысл?
Ради какой оптимизации это сделано?
Намекнуть/подсказать ?  Улыбающийся
Записан
spectre71
Гость
« Ответ #10 : Август 29, 2009, 16:11 »

Ну и какой здесь скрытый смысл?
Ради какой оптимизации это сделано?
Намекнуть/подсказать ?  Улыбающийся
Без контекста использования ничего толкогого о таком способе сказать нельзя.
Так что рассказывай Улыбающийся
Записан
zenden
Гость
« Ответ #11 : Август 29, 2009, 16:25 »

Чтоб можно было указать исходную матрицу в качестве результирующей, и не думать что у функции внутри.
« Последнее редактирование: Август 29, 2009, 16:27 от zenden » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Август 29, 2009, 16:27 »

Без контекста использования ничего толкогого о таком способе сказать нельзя.
Так что рассказывай Улыбающийся
Подумайте как было бы удобно (и неудобно) вызывать функцию InvertMatrix. Какие проблемы/неудобства могут возникнуть при использовании классического

void InvertMatrix( Matrix * theInvertedMatrix, const Matrix * theSourceMatrix );

?
« Последнее редактирование: Август 29, 2009, 16:31 от Igors » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Август 29, 2009, 16:29 »

Чтоб можно было указать исходную матрицу в качестве результирующей.
Прямое попадание. все правильно. Поздравляю! 
Записан
spectre71
Гость
« Ответ #14 : Август 29, 2009, 16:31 »

Чтоб можно было указать исходную матрицу в качестве результирующей.
Прямое попадание. все правильно. Поздравляю!  
Ну и в чем прикол? Не вижу особой разницы.
Разве что
void InvertMatrix( Matrix * theInvertedMatrix, const Matrix * theSourceMatrix );
Лучше чем
void InvertMatrix( Matrix * theInvertedMatrix, Matrix theSourceMatrix );
с точки зрения оптимизации.
В последнем случае - может возникнуть лишнее копирование структуры
« Последнее редактирование: Август 29, 2009, 16:36 от Spectre » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 23.