2016-12-14 2 views
2

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

Возможно ли это? (Нет веских оснований для этого - просто любопытно.)

- Редактировать: Этот вопрос касается не различий между указателями и ссылками, а скорее того, как достичь цели, используя их, и, следовательно, не является дублировать «в чем разница между ссылками и указателями?»

ответ

2

Я хочу, чтобы дать место в памяти, что переменная «а» занимает имя «b»

Что вы хотите, это ссылка, если я правильно понимаю ваш вопрос.

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 
0

Нет, присвоение (или переименование) a имя переменной (идентификатор) невозможно.

Однако, если вы заинтересованы, вы можете всегда

int * b; 
b = &a; 

где bуказывает переменная a. Изменения, внесенные в *b, будут отражать по номеру a и наоборот.

0

Вы можете иметь несколько указателей, указывающих на то же место:

int i = 10; 
int* p1 = &i; 
int* p2 = &i; 
int* p3 = p2; 

Как вы уже открыли для себя, вы не можете сказать, &b = ptr;

1

int& b = a связывает целое число, присвоенный a к b. Адрес переменной a - это полностью немодифицированный. Это просто означает, что все используемые (ссылки) фактически используют значение, присвоенное b.

Смежные вопросы