Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Способы передачи параметров в функцию 
:(
    Опции темы
Wowa
Дата 17.2.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Call by value

- передаем значение в функцию
- копирование значения в локальную переменную
- изменение переменой в теле функции незаметно для "вызовщика" функции.


Пример:
Код

void abheben (int konto, int betrag) {
konto = konto - betrag;
}

int main () {
int meins = 1500;
int deins = 1000;
abheben (meins, deins);
cout << meins << endl;
return 0;
}



Call by reference
- передаем саму переменную, как параметр в функцию
- изменения переменной в теле функции изменяют саму переменную
- Эти изменения на неклокальной переменной называются Seiteneffekt.

Код

void abheben (int& konto, int betrag) {
konto = konto - betrag;
}

int main () {
int meins = 1500;
int deins = 1000;
abheben (meins, deins);
cout << meins << endl;
return 0;
}

PM WWW   Вверх
srd
Дата 17.2.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Про указатели забыл, т.е.
Код
void abheben (int *konto, int betrag) {...}



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Wowa
Дата 17.2.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



так?
Код

void abheben (int* konto, int betrag) {
konto = konto - betrag;
}

int main () {
int meins = 1500;
int deins = 1000;
abheben (&meins, deins);
cout << meins << endl;
return 0;
}

PM WWW   Вверх
srd
Дата 17.2.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Нет, правильно так:
Код

void abheben (int* konto, int betrag) {
*konto = *konto - betrag;
}

int main () {
int meins = 1500;
int deins = 1000;
abheben (&meins, deins);
cout << meins << endl;
return 0;
}

А лучше вместо *konto = *konto - betrag написать *konto -= betrag

Это сообщение отредактировал(а) srd - 17.2.2005, 13:02


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
pablo
Дата 17.2.2005, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Если не устраивает егзотическая запись с *, можно передать ссылку; вместо *, напиши &.
Работать будет также, но понятнее


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
srd
Дата 17.2.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



В мире Си\Си++ принято передавать аргументы функции через указатель, а не ссылку, если функция изменяет значение аргумента.
Код

func1(&a); // сразу можно предположить, что функция меняет значение аргумента.
func2(a); // неясно, что происходит, толи передается аргумент по значению, то ли по ссылке,
// то ли меняется, то ли нет.

Ссылки были введены в Си++ в основном для возможности перегрузки операторов.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Doc_d0s
Дата 17.2.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: 2
Всего: 3



Хочешь менять значение переменной, которая вне ф-ии, то передавай её по указателю, не хочешь, то по значению smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
gepard
Дата 18.2.2005, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



А я вообще не понял в чём замес...


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Ni@m
Дата 25.2.2005, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: 0
Всего: 6



Еще все забыли, что можно в функцию передавать функцию :
Код

void func(void (*fp)(int), int arg)
{
     fp(arg);
}

вот так-то.
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
Hroft
Дата 25.2.2005, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



А чем указатель на функцию отличается от указателя на инт? smile Можно поприкалываться и передать в функцию массив интов, преобразованный к указателю на функцию, и его выполнять. Самомодифицирующийся код получится smile.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.