Можете ли вы присвоить имя переменной объекту, на который указывает указатель, после того, как указатель был выделен?

Скажем, у меня есть код, где у меня есть переменная а, и я выделяю указатель, чтобы указать 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 и наоборот.

Другие вопросы по тегам