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

Чем отличаются указатели от ссылок? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.74
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 15:05     Чем отличаются указатели от ссылок? #1
Как я понимаю указатель,он хранит адрес переменной,а ссылка просто берёт значение переменной?Привидите примерчик какой=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 15:05     Чем отличаются указатели от ссылок?
Посмотрите здесь:

а как вам это чем отличаются C++
Чем отличаются ф-ии GlobalAllocPtr() и malloc()? C++
Чем отличаются компиляторы? C++
чем отличаются static_cast от C++
Чем отличаются dynamic_cast и static_cast? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 15:08     Чем отличаются указатели от ссылок? #2
Цитата Сообщение от faLek Посмотреть сообщение
ссылка просто берёт значение переменной
Ссылка это как-бы другое имя для переменной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
void foo1(int x){
    x=10;
}
void foo2(int * x){
    *x=100;
}
void foo3(int & x){
    x=1000;
}
 
int main(){
    int x=0;
    foo1(x);
    std::cout<<x<<std::endl;
    foo2(&x);
    std::cout<<x<<std::endl;
    foo3(x);
    std::cout<<x<<std::endl;
    return 0;
}
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 15:11  [ТС]     Чем отличаются указатели от ссылок? #3
Croessmah, ну это да,а могли бы вы ещё пояснить,мне отличие обычной переменной и переменной при помощи указателя,вот про массивы я понимаю для чего указатели,а в остальных случаях,почему лучше использовать указатель?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 15:12     Чем отличаются указатели от ссылок? #4
Ссылка — неявный указатель. Ей нельзя присвоить адрес другой переменной, ей нельзя присвоить какой-то "следующий адрес" (никакой адресной арифметики), ей нельзя присвоить "никакой" адрес (null). Отсюда и свойства: не надо какой-то специальной операции разыменования, она выполняется неявно; ссылки можно создавать только сразу инициалированными; ссылки можно оптимизировать — не хранить этот самый адрес физически в виде переменной, а сразу подставлять при компиляции, если это возможно.

Указатель стоит использовать, если 1) идёт работа с динамической памятью (там переменные создаются на лету); 2) надо адресная арифметика; 3) надо физически хранить адрес и иметь возможность его изменять; 4) совместимость.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 16:17  [ТС]     Чем отличаются указатели от ссылок? #5
Пусть p1 указатель на переменную с текущим значением 1000,я хочу ,чтобы вывело 1004,посмотреть указатель на следующее int-значение...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main(){
 
    int *p1 = 0,p = 1000;
    p = *p1;
    p++;
    
    cout<<p;
 
    system("pause");
    return 0;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 16:29     Чем отличаются указатели от ссылок? #6
Цитата Сообщение от faLek Посмотреть сообщение
посмотреть указатель на следующее int-значение...
Оно будет лишь интерпретировано, как int.

Цитата Сообщение от faLek Посмотреть сообщение
на переменную с текущим значением 1000,я хочу ,чтобы вывело 1004
C++
1
2
3
int *p1 = 0,p = 1000; 
p = *p1; 
p++;
т.к. p имеет тип int, то p++:
p=1
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 16:31  [ТС]     Чем отличаются указатели от ссылок? #7
а как сделать ,чтобы указатель уже указывал на следующее значение,т.е. сразу при икременттировании вывел 1004?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 16:36     Чем отличаются указатели от ссылок? #8
Цитата Сообщение от faLek Посмотреть сообщение
а как сделать ,чтобы указатель уже указывал на следующее значение,т.е. сразу при икременттировании вывел 1004?
Вы выводите переменную p, а она имеет тип int.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iomanip>
int main(){
    int t=1000;
    int* p=&t;
 
    for(int i=0;i<10;++i){
        std::cout<<std::setw(12)<<*(p+i)<<std::setw(12)<<(p+i)<<std::endl;
    }
    return 0;
}
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 16:38  [ТС]     Чем отличаются указатели от ссылок? #9
только взятием адреса у какой-то переменной можно инициализировать указатель?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 16:40     Чем отличаются указатели от ссылок? #10
Цитата Сообщение от faLek Посмотреть сообщение
только взятием адреса у какой-то переменной можно инициализировать указатель?
Можно и в ручную адрес забить, только что из этого выйдет?
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
17.01.2013, 16:40     Чем отличаются указатели от ссылок? #11
Цитата Сообщение от faLek Посмотреть сообщение
Croessmah, ну это да,а могли бы вы ещё пояснить,мне отличие обычной переменной и переменной при помощи указателя,вот про массивы я понимаю для чего указатели,а в остальных случаях,почему лучше использовать указатель?
Если у вас большая структура данных и каждый раз её передавать целиком в функцию, то будут большие затраты памяти и стека. Передавая структуру по указателю, вы передаете лиш адрес вашей структуры, что при водит к экономии памяти и стека.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 16:43  [ТС]     Чем отличаются указатели от ссылок? #12
Croessmah, чушь=)
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
17.01.2013, 17:01     Чем отличаются указатели от ссылок? #13
Цитата Сообщение от faLek Посмотреть сообщение
Croessmah, чушь=)
Вручную имеет смысл забивать указатель NULL это очень хороший указатель.
Например если у вас есть переменная int x = 0 это не значит, что она пустая, 0 это может быть важное значение. И какое нам занести в переменную значение, которое покажет, что переменную нельзя использовать?
А вот если int *x = NULL то можно совершенно с уверенностью сказать, что переменная по адресу х не содержит полезных данных.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
17.01.2013, 17:04  [ТС]     Чем отличаются указатели от ссылок? #14
UserAK, ну это знал и понимал,немного другое имел ввиду))))))
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
17.01.2013, 17:16     Чем отличаются указатели от ссылок? #15
к счастью, если кто-то обманет компилятор и запихает-таки в адрес эту самую чушь, то у него должно хватить мудрости этого не делать
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
17.01.2013, 17:40     Чем отличаются указатели от ссылок? #16
Цитата Сообщение от faLek Посмотреть сообщение
Croessmah, чушь=)
Да ладно? =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 17:59     Чем отличаются указатели от ссылок?
Еще ссылки по теме:

Чем отличаются операторы вывода? C++
C++ Чем отличаются эти функции?
Чем отличаются знаковые и беззнаковые типы? C++

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 17:59     Чем отличаются указатели от ссылок? #17
Цитата Сообщение от Croessmah Посмотреть сообщение
Да ладно? =)

Не по теме:

Это ответ на риторический вопрос, а не наезд.

Yandex
Объявления
17.01.2013, 17:59     Чем отличаются указатели от ссылок?
Ответ Создать тему
Опции темы

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