C/C++

При присвоении i++; или ++i; разница есть а вот есть ли разница при присвоении int &i; int& i; int* i; int *i;

int &i; int& i; // присваиваются имена переменных. Например,

int var = 25;
int& i = var;

int* i; int *i; // присваиваются адреса переменных. Например,

int var = 36;
int* i = &var;

И в том и в другом случае нельзя присвоить числовую константу либо адрес на неё. Например,

int& i = 87; //ошибка
int* i = &96; // ошибка

Положение звёздочки при объявлении указателя и амперсанда при объявлении ссылки никак не влияют. Допускается следующие объявления:

int& a = var;
int & a = var;
int &a = var;

int* p = &var;
int * p = var;
int *p = &var;

Существенной особенностью ссылки от указателя является обязательность её инициализации в момент объявления.

int var = 25;
int val = 36;
int& a = var; // так можно
a = val; // и так теперь так можно
int& b; // а так нельзя

int* p; // так можно
p = &var; // так можно
Сергей Листратенко
Сергей Листратенко
57 510
Лучший ответ
Нет, разницы между int &i; и int& i;, между int* i; и int *i; нет. Но надо понимать, что * и & относится всегда к имени переменной. Т.е. и int* i;, и int *i; означает:
int (*i);

И если ты напишешь:
int* i, j;
, то означать это будет:
int (*i), j;

А вот разница между int *i; и int &i; безусловно есть.
Женька Вавилов
Женька Вавилов
54 901
В принципе похожая разница
Сергей Князев
Сергей Князев
26 111