Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
rome098
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 46
#1

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

05.11.2013, 17:59. Просмотров 878. Ответов 6
Метки нет (Все метки)

Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!
http://www.cyberforum.ru/cpp-beginners/thread517895.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 17:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Указатели и ссылки c++ (C++):

Ссылки и указатели
Добрый день. Возможно было. В чем существенная разница между передачей данных...

Указатели и ссылки
Экспериментируя с указателями пришел к вот таким выводам: int a;...

Ссылки vs Указатели
Почему ссылки считаются более хорошим средством, чем указатели? Ведь если...

Ссылки и указатели
Добрый день, не могу понять чем помогают при использовании указатели и ссылки?...

Указатели и ссылки?
Ниже приведёна программы которая вызывает функцию. В функции происходит...

6
scenotaph
120 / 120 / 47
Регистрация: 29.03.2013
Сообщений: 237
05.11.2013, 18:11 #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; 
}
0
Anton_Kretov
89 / 51 / 15
Регистрация: 26.06.2013
Сообщений: 179
05.11.2013, 18:12 #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. Тут много не опишешь, почитайте в книге Шилтда "Базовый курс" или "Шаг за шагом", все подробно описано.
0
rome098
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 46
05.11.2013, 18:40  [ТС] #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. Меньше пямяти занимает?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
05.11.2013, 18:44 #5
Цитата Сообщение от rome098 Посмотреть сообщение
Я не пойму для чего они нужны!
главным образом чтобы не создавать копию объекта. Мы можем просто сослаться на то место, где он храниться и работать с ним.

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

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

Только не int, а string. Меньше пямяти занимает?
Адрес памяти нужен лишь программе, точней, компилятору, который будет знать, с каким объектом работает указатель.
А про string я не понял. Если вы имеете в виду, что больше памяти занимает - string или int, то узнайте кол-во занимаемых байт на 1 объект.
1
rome098
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 46
05.11.2013, 18:48  [ТС] #7
Цитата Сообщение от MrGluck Посмотреть сообщение
главным образом чтобы не создавать копию объекта. Мы можем просто сослаться на то место, где он храниться и работать с ним.

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

Добавлено через 2 минуты
Также, мы можем изменять объекты внутри функций. При передаче по значению мы лишь сможем работать с данными, но при выходе из тела функции, переданный объект как был так и останется и все изменения пропадут (они будут произведены с копией).
Хорошо, спасибо! Я понял!
0
05.11.2013, 18:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 18:48
Привет! Вот еще темы с решениями:

Указатели и ссылки
Используя вместо самой переменной указатель на нее написать программу в...

Указатели и ссылки
Допустим, что есть функция, в которую мы кидаем массив по указателю и кол-ву...

Указатели и ссылки
Собственно, не могу до конца осознать как это работает, вот пример из...

Указатели и ссылки [С++]
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru