Вот разница между тремя. Когда вы назначаете b равным a, вы действительно создаете отдельную копию. Однако если вы измените a, то b останется прежним. Например, если вы увеличите a до 2, а затем напечатаете результаты, a будет равно 2, но b все равно будет равно единице. С другой стороны, поскольку c инициализируется как ссылка на a.
Всякий раз, когда изменяется значение, c также меняет свое значение. Вы также можете изменить значение a, изменив значение c. Для получения дополнительной информации об указателях и ссылках, пожалуйста, прочитайте эту статью http://www.cplusplus.com/doc/tutorial/pointers/
Вот пример кода
#include <iostream>
int main() {
int a = 1;
int b = a;
int &c = a;
std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
a++;
std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
}
Выход:
a = 1, b = 1, and c = 1
(after increment) a = 2, b = 1, and c = 2