Форум программистов, компьютерный форум CyberForum.ru

Ссылки и адреса - C++

Восстановить пароль Регистрация
 
PodOnoK
16 / 13 / 0
Регистрация: 10.01.2010
Сообщений: 252
18.05.2010, 09:31     Ссылки и адреса #1
Вот, где лучше всего использовать адреса и ссылки? Просто не много не понятня для чего это все.
Вот например эту запись
C++
1
2
int mas;
int* pmas=&mas
Чесно говоря, даже не понятно всего удобства. Зачем делать переменную *pmas если при обращении к ней или присваивании ей значения автоматически оно присваивается и mas...
Буду благодарен за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2010, 09:31     Ссылки и адреса
Посмотрите здесь:

адреса C++
Получение IP адреса (Си) C++
указатели и адреса. C++
C++ смена IP-адреса
C++ Адреса и указатели
IP адреса. C++
адреса C++
Понимание адреса, ссылки и указателя C++
Адреса переменных C++
C++ смещения адреса
C++ Получение адреса
Почему при присваивании адреса массива не ставится знак '&' получения адреса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-Xeon-
2 / 2 / 0
Регистрация: 15.02.2010
Сообщений: 26
18.05.2010, 10:15     Ссылки и адреса #2
PodOnoK, в данной записи у тебя есть обычная переменная int mas и указатель int* pmas, далее у тебя указателю pmas присваевается адрес переменной mas (у тебя написанно int* pmas=&mas - это инициализирует указатель адрессом по которому хранится mas, это дело равносильно если написать так: int* pmas; pmas = &mas; // в последнем инициализируем указатель). Ссылок сдесь нет, & - операция изъятия адресса.

Добавлено через 7 минут
PodOnoK, ссылки объявляются так int &pmas = mas; // это ссылка. Ссылка это равносильно второму имени для какойто переменной или объекта. Есть ещё одно но: ссылка должна быть сразу инициализирована, т.е. написать так: int mas; int &pmas; pmas = &mas; не верно!

Добавлено через 2 минуты
Удобство использования указателей - это динамические массивы, строки, списки и т.д., всё это бес указателей не может существовать. Ссылки применяются например при перегрузки операторов (С++).
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
18.05.2010, 10:31     Ссылки и адреса #3
Указатели НЕЗАМЕНИМЫ в том случае, если ты написал каку-то функцию и в ходе исполнения этой функции ДОЛЖНО измениться значение глобальной переменной
(Если такая переменная одна, то можно сделать, чтобы функйция возвращала её значение, а если две или больше, то только через указатели)

Для этого в эту функцию необходимо передать оджним из параметров адрес этой переменной, в теле функции его разыменовать и всё будет ОК
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <windows.h>
 
 
void funktsia (int* uk) {
 *uk= *uk+ 100;
}
 
 
 
 
int main () {
 int per= 0;
 
 //Вот этой переменной необходимо изменить значение ВХОДЕ ВЫПОЛНЕНИЯ ФУНКЦИИ funktsia
 int per_1= 0;
 //Щас оно равно нулю
 printf ("per_1= %d\n", per_1);
 
 //Для этого пишем так:
 int* ukaz= &per_1;
 funktsia (ukaz);
 
 //(Можно бло бы написать funktsia (&per);  эффект был бы тот же)
 
 printf ("per_1= %d\n", per_1);
 system ("pause");      
 
}
Добавлено через 1 минуту
ПРрошу прощения, надо так:
//(Можно бло бы написать funktsia (&per_1); эффект был бы тот же)
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
19.05.2010, 14:45     Ссылки и адреса #4
А если использовать ссылку то всё же так:

C++
1
2
3
4
5
void funktsia (int& uk) {
 uk= uk+ 100;
}
//вызов в мейне 
funktsia (per_1);
Yandex
Объявления
19.05.2010, 14:45     Ссылки и адреса
Ответ Создать тему
Опции темы

Текущее время: 14:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru