А: сылка, это как ярлык в винде на текстовый документ. Константная значит только для чтения
Б: Ну это понятно. Вот еще бы понять, чем этот ярлык от указателя отличается.
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}