MyTetra Share
Делитесь знаниями!
Еще одна попытка объяснить, что такое ссылка и указатель, и чем они отличаются
Время создания: 21.01.2016 23:15
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/1453407345z5i1pfpi6s/text.html на raw.github.com

А: сылка, это как ярлык в винде на текстовый документ. Константная значит только для чтения

Б: Ну это понятно. Вот еще бы понять, чем этот ярлык от указателя отличается.

A: Да очень просто)

Ссылка чётко ссылается на какой-то "файл" и путь к этому файлу мы менять не можем. А в указателе можем.

Ссылка просто переименовывает переменную, а указатель содержит адрес, по которому данные лежат. Этот адрес можно менять. Допустим, есть у тебя массив int values[3], вот такой:


int values[3] = {1, 2, 3};


возьмём ссылку и указатель на первый элемент массива (обрати внимание, не на нуливой!):

int &ref = values[1];
int *pointer = &values[1]; // & берёт именно адрес


Берётся адрес values, к нему прибавляется 1 элемент смещения и полученный адрес разыменовывается.


Б: Но помня, что имя массива - это адрес наливого элемента массива, то можно записать:


int *pointer = &values[0];
int *pointer = values;


правильно?


А: Да. Еще примеры:


int a = 5;
int &b = a;
b = 6; // a = 6


Но:


int a = 5;
const int&b = a;
b = 6; // error b is const


И вот еще простые примеры:


int a[] = {1, 2, 3}
int *b = a;
b[1] = 5; // a = {1, 5, 3}
*b = 2; // a = {2, 5, 3}
*(b + 2) = 8; // a = {2, 5, 8}



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования