 
 
Ссылок в С нет, поэтому К.и Р. о них ничего не пишут.
e2e4 писал(а):
Вроде бы указатели и #define перекрывают все разумные применения ссылок.
Ничего подобного: 
Код:
int& v = a[f(x)];
int b = v*v + 17 v;
 никаким #define не покроешь. Даже если f(x) — просто выражение, а не вызов. Не говоря уж о приятных побочных эффектах.
e2e4 писал(а):
Возможно я не прав, поправьте.
reference в С++ — это приемлемый вид передачи параметра, подчёркивающий, что указатель — не массив, и не может меняться. Во всех остальных случаях (включая приведённый выше пример) она скорее задуривает мозги, чем помогает. Уж если надо, лучше так: 
Код:
int* p = & a[f(x)];
int b = (*p)*(*p) + 17 (*p);
. Впрочем, это дело вкуса. Но уж больно больно наступать на эти детские грабли. 
Пример, с которого всё началось — утрирован до безобразия. А вот попроще: 
Код:
struct C_Test
{
  bool & bTest;
  bool bTestDefault;
 
  C_Test():bTest(bTestDefault){}
 
  void Set_New_Test(const bool & bNewTest)
  {
    bTest = bNewTest; // !!! потеря константности !!!
  }
};
Вопрос: почему компилятор не выдаёт ошибки, хотя невооружённым взглядом видна потеря константности? А вот когда заменяем ссылку на указатели, выдаёт.
Добавлено спустя 1 час 1 минуту 20 секунд:e2e4 писал(а):
Вроде бы указатели и #define перекрывают все разумные применения ссылок.
Перечитал. При первом чтении пропустил указатели, что явно 
не говорит в пользу моей внимательности. 
 
 
Указатели и #define, видимо, покрывают. Роль ссылок, как я понимаю, такая же, как у ++: всегда можно написать x += 1, но ++x удобнее.