Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

Указатели и адреса ссылки в языке си ( с )

   Указатели и адреса ссылки

Ссылка это и есть, впринцепе, указатель, только скрытый и является еще одним именем для переменной.

Обозначения:

int i = 10;
// Объявление указателя
int *ptr = &i;
// Объявление ссылки
int &p = i;

Ссылки обычно используют тремя путями:

  1. Можно передавать ссылку в функцию как аргумент (параметр функции).
  2. int f (int &d)
    {
       d = 10;
       return d;
    }

    При объявлении ссылки нужно поставить знак (&). Все последующие указания этой переменной будут восприниматься как указатель на переменную. А при вызове функции, которая в качестве параметров принимает указатель, знак ссылки (&) ставить не нужно, потому что адрес переменной будет передаваться автоматически.

    int i = 15;
    int c = f(i);

    Преимущества параметров-ссылок:

    • Не нужно работать с адресом переменной, так как он передается автоматически.
    • Со ссылкой можно работать, так же как и с переменной, т.е. на много легче чем с указателями.
    • Так как мы передаем адрес нашего объекта (переменной), то ни какой копии объекта не создается, и мы работает напрямую с нашим объектом.

  3. Можно возвращать ссылку из функции.
  4. char& replace (int i, char* s)
    {
       return s[i];
    }

    Польза:
    • при перегрузке операторов
    • /* Перегрузка оператора вывода определенного класса *\
      ostream &operator<< (ostream &output, Student &s)
      {
         output << s.name << endl;
      return output;
      }

    • дает право использовать функцию слева от оператора присваивания

  5. Есть возможность создания независимой ссылки.
  6. int c;
    int &count = c;

Независимые ссылки должны быть обязательно инициализированы, так как NULL ссылок не бывает, а ссылка должна содержать адрес, на объект, на который она будет ссылаться. Независимая ссылка, по сути, является просто вторым именем переменной (объекта)
Ограничения на ссылки:

  • Если ссылку инициализировал, то присвоить ей другой объект уже нельзя
  • Так как ссылка ссылается на адрес объекта, то соответственно она не имеет своего адреса
  • Указатель соответственно так же нельзя создать на ссылку, так как он содержит адрес, а у ссылки адреса нет
  • К базовому полю нельзя обратиться с помощью ссылки
  • Не бывает нулевой ссылки
  • Ссылки, если они независимые, должны быть инициализированы во время своего объявления

Вывод этой статьи очень прост. В языке си указатели надо использовать тогда и только тогда, если наш объект будет всегда существовать и нам не потребуется с помощью этой же ссылки получить доступ к другому объекту. Соответственно указатели следует использовать в противоположных случаях!

Рекомендации:

  1. Указатели
  2. Многомерный массив
При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru