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

Указатели и ссылки c++ - C++

Восстановить пароль Регистрация
 
rome098
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 46
05.11.2013, 17:59     Указатели и ссылки c++ #1
Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 17:59     Указатели и ссылки c++
Посмотрите здесь:

Указатели и ссылки C++
C++ Указатели и ссылки
C++ Указатели и ссылки [С++]
Ссылки vs Указатели C++
Указатели и ссылки? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
05.11.2013, 18:11     Указатели и ссылки c++ #2
rome098, Передача аргументов в функцию, например
C++
1
2
3
4
5
6
7
8
9
10
void func(int value) {
    value=value+5;//создаётся копия переменной икс, которая увеличивается на 5
}
int main() 
{ 
    int x = 5;
    func(x);
    cout<<x; // x = 5;
return 0; 
}
C++
1
2
3
4
5
6
7
8
9
10
void func(int &value) {
    value=value+5; //передача по ссылке переменной x, уже изменяется сама переданная переменная
}
int main() 
{ 
    int x = 5;
    func(x);
    cout<<x; // x = 10;
    return 0;
}
Так же и указателями
C++
1
2
3
4
5
6
7
8
9
10
void func(int *value) {
    *value=*value+5;
}
int main() 
{ 
    int x = 5;
    func(&x);
    cout<<x; // x = 10
return 0; 
}
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
05.11.2013, 18:12     Указатели и ссылки c++ #3
Указатель - это переменная, "указывающая" на какой-либо объект, к примеру, переменную типа int. Указатель обязательно должен иметь базовый тип, который как бы говорит, что "этот указатель может взаимодействовать только с переменными такого же типа данных". С помощью указателей можно совершать некие действия, к примеру:
C++
1
2
3
int a = 10;
int *ip; //Объявили указатель на int
ip = &a; //Теперь мы как бы сказали указателю, что "ты должен хранить в себе адрес памяти этой переменной"
Попробовав сделать такую инструкцию:
C++
1
cout << ip;
Получим число в шестнадцатеричной СС, которое будет в себе выражать адрес переменной в памяти.
Есть также и второй оператор - * (один из самых высоких приоритетов). К примеру, такой код:
C++
1
2
3
4
int a = 10;
int *ip = &a; //Тут все понятно, "привязали указатель".
//Теперь магия:
cout << *ip; //Тем самым, мы выведем в консоль значение переменной, на которую указывает указатель (простите за тавтологию).
Также мы можем совершать разные арифметические операции с указателями, как с его адресами, так и со значениями, к примеру, продолжая вышеописанный код:
C++
1
*ip++;
Сейчас мы сделали инкремент значения переменной на которую указывает указатель (вот опять...)

Огромное (для меня) преимущество указателей - их взаимосвязь с массивами, а также их использование в функциях. К примеру, такой код:
C++
1
2
3
4
5
int array[10];
//Тут типо рандомно заполнили его
int *ip = array;
//Если мы попытаемся вывести ip (БЕЗ ЗВЕЗДОЧКИ), то получим значение 0-ого элемента массива
cout << ip; //Получили
С массивами и указателями, а также с их взаимосвязью надо знать много, я описал основное, и то не все. В функциях указатели могут сыграть роль "посредника", так сказать. Раньше мы передавали в качестве аргументов определенные значения, которые становились локальными переменными и изменялись только внутри функции, но значения этих аргументов будут неизменны вне функции. Объявив параметр функции как указатель, мы будем работать в функции непосредственно с самой переменной (с самим аргументом, а не с его "локальной" копией в функции), а значит, что после инкрементирования значение указателя-параметра, изменится и значение передаваемой переменной в качестве аргумента-указателя.

P.S. Тут много не опишешь, почитайте в книге Шилтда "Базовый курс" или "Шаг за шагом", все подробно описано.
rome098
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 46
05.11.2013, 18:40  [ТС]     Указатели и ссылки c++ #4
Цитата Сообщение от Anton_Kretov Посмотреть сообщение
int a = 10;
C++
1
2
int *ip; //Объявили указатель на int
ip = &a; //Теперь мы как бы сказали указателю, что "ты должен хранить в себе адрес памяти этой переменной"
Попробовав сделать такую инструкцию:
C++
1
cout << ip;
Получим число в шестнадцатеричной СС, которое будет в себе выражать адрес переменной в памяти.
1) Для чего тогда нужен этот адресс памяти?
2) какая разница будет если мы присвоем НЕ УКАЗАТЕЛЮ, а обычной переменной тот же адресс?
C++
1
2
int ip;
Ip = &a;
Добавлено через 6 минут
Цитата Сообщение от rome098 Посмотреть сообщение
1) Для чего тогда нужен этот адресс памяти?
2) какая разница будет если мы присвоем НЕ УКАЗАТЕЛЮ, а обычной переменной тот же адресс?
C++
1
2
int ip;
Ip = &a;
Только не int, а string. Меньше пямяти занимает?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
05.11.2013, 18:44     Указатели и ссылки c++ #5
Цитата Сообщение от rome098 Посмотреть сообщение
Я не пойму для чего они нужны!
главным образом чтобы не создавать копию объекта. Мы можем просто сослаться на то место, где он храниться и работать с ним.

Добавлено через 30 секунд
Ссылка это фактически разыменованный указатель.

Добавлено через 2 минуты
Также, мы можем изменять объекты внутри функций. При передаче по значению мы лишь сможем работать с данными, но при выходе из тела функции, переданный объект как был так и останется и все изменения пропадут (они будут произведены с копией).
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
05.11.2013, 18:47     Указатели и ссылки c++ #6
Цитата Сообщение от rome098 Посмотреть сообщение
1) Для чего тогда нужен этот адресс памяти?
2) какая разница будет если мы присвоем НЕ УКАЗАТЕЛЮ, а обычной переменной тот же адресс?
C++
1
2
int ip;
Ip = &a;
Добавлено через 6 минут

Только не int, а string. Меньше пямяти занимает?
Адрес памяти нужен лишь программе, точней, компилятору, который будет знать, с каким объектом работает указатель.
А про string я не понял. Если вы имеете в виду, что больше памяти занимает - string или int, то узнайте кол-во занимаемых байт на 1 объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 18:48     Указатели и ссылки c++
Еще ссылки по теме:

Указатели и ссылки C++
Указатели и ссылки C++
Указатели и ссылки C++

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

Или воспользуйтесь поиском по форуму:
rome098
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 46
05.11.2013, 18:48  [ТС]     Указатели и ссылки c++ #7
Цитата Сообщение от MrGluck Посмотреть сообщение
главным образом чтобы не создавать копию объекта. Мы можем просто сослаться на то место, где он храниться и работать с ним.

Добавлено через 30 секунд
Ссылка это фактически разыменованный указатель.

Добавлено через 2 минуты
Также, мы можем изменять объекты внутри функций. При передаче по значению мы лишь сможем работать с данными, но при выходе из тела функции, переданный объект как был так и останется и все изменения пропадут (они будут произведены с копией).
Хорошо, спасибо! Я понял!
Yandex
Объявления
05.11.2013, 18:48     Указатели и ссылки c++
Ответ Создать тему
Опции темы

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