Можете ли вы присвоить имя переменной объекту, на который указывает указатель, после того, как указатель был выделен?
Скажем, у меня есть код, где у меня есть переменная а, и я выделяю указатель, чтобы указать a
:
int a = 5;
int* ptr = &a;
Тем не менее, после этого, я хочу дать в памяти эту переменную a
занимает имя b
,
int b = a; // doesn't work, because it only copies the value
&b = ptr; // doesn't work, not an assignable value
ptr = &b; // doesn't work, this moves the pointer to point to b
// instead of renaming the location that ptr already pointed to
Это возможно? (Нет веских причин для этого - просто любопытно.)
- Изменить: этот вопрос не о различиях между указателями и ссылками, а о том, как достичь цели с помощью их использования, и, следовательно, не является дубликатом "в чем разница между ссылками и указателями?"
4 ответа
Я хочу указать в памяти, что переменная "а" занимает имя "б"
То, что вы хотите, это ссылка, если я правильно понимаю ваш вопрос.
int& b = a; // b is an alias of a
assert(&a == &b); // the same memory location
b = 6; // the value of both a and b changed to 6
int& b = a
связывает целочисленную ссылку a
в b
, Адрес переменной a
полностью неизменен. Это просто означает, что все использует (ссылки) на самом деле использовать значение, присвоенное b
,
Вы можете иметь несколько указателей, указывающих на одно и то же место:
int i = 10;
int* p1 = &i;
int* p2 = &i;
int* p3 = p2;
Как вы уже обнаружили, вы не можете сказать, &b = ptr;
Нет, присвоение (или переименование) имени переменной (идентификатора) невозможно.
Однако, если вы заинтересованы, вы всегда можете
int * b;
b = &a;
где b
указывает на переменную a
, Изменения сделаны в *b
будет отражать a
и наоборот.