Показать сообщение отдельно
Непрочитано 30.11.2011, 13:03   #12
Аватар для Azagthtot
Эксперт

По умолчанию Re: Получение переменных ..

Давайте разберем то, что вы не поняли (а на лекции ходить надо )
1. Передача параметра в функцию по значению
Код:
void f(int a) {
  a = 10;
}
int b = 5;
f(b);
cout << b;
Некоторые люди надеются, что после выполнения функции b станет 5. А вот фиг вам! При вызове функции создается копия значения переменной b. Кривой но наглядный пример
Код:
int b = 5;
int c= b; // ЭТО "ДОБАВИЛ" компилятор
f(c);
Если вам надо изменить переменную, то передавать надо не по значению, а по указателю.
Что такое указатель? Это адрес памяти (целое число) по которму лежит значение переменной.
т.е.
если по адресу 0x50 у нас лежит значение переменной b, которое равно 5, то численное значение &b будет 0x50;
теперь типичная ошибка
Код:
void f( int *a) { // передаем указатель
 a = 10;
}
ВОт так делать НЕ НАДО. Вы только что изменили не значение по адресу, а САМ адрес. Для доступа к значению указателя есть операция разыменования *
Код:
void f(int *a) {
 *a = 10;
}
Как теперь вызывать функцию?
Код:
int b = 5;
f(&b); // передаем адрес по которому лежит значение b (указатель)
cout << b;
В С++ введен еще один тип передачи параметра по ссылке (by reference) выглядит он так
Код:
void f(int &a) {
 a  =10;
}
int b =5;
f(b);
cout << b;
Данный вызов равноценен передечи указателя, только "скрывает" работу с указателем (взятие адреса и разыменование)
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо: