скрытое меню

указатели и ссылки (синтаксическое отличие)

Объявление переменной i, создание ссылки на нее и указателя на нее :

    int i=0x12;
    int &ri=i;
    int *pi=&i;
    printf("  i=%x       \n",i);
    printf(" pi=%x   %p   \n",pi,pi);
    printf("*pi=%x   %p   \n",*pi,*pi);
    printf(" ri=%x   %p \n",ri,ri);
    printf("&ri=%x   %p \n",&ri,&ri);
    printf("&pi=%x   %p \n",&pi,&pi); // адрес самого указателя


выведет :

  i=12       
 pi=28ff20   0028FF20   
*pi=12   00000012   
 ri=12   00000012 
&ri=28ff20   0028FF20 
&pi=28ff1c   0028FF1C   // адрес самого указателя

1. Сразу отметим важный момент - синтаксическое отличие указателя от ссылки:

для указателя :
int *pi=&i; *pi - это само значение , pi  - это адрес значения
у ссылки наоборот :
int &ri=i;   ri - это само значение , &ri - это адрес значения
Далее надо тупо это понимать!
*xxx - значение, xxx - адрес
&xxx - адрес , xxx - значение

2. Создание указателя - это новая ячейка в памяти, а ссылка ничего не создает нового в памяти

int *pi=&i;
// итак pi - - это адрес указателя
printf("&pi=%x   %p \n",&pi,&pi);  так можно делать и вы увидите адрес самой ссылки 
&ri - адрес "ссылки", но ri по сути это просто псевдоним i, 
просто нам хочется i обозвать еще также ri. Но это все равно останется только одна ячейка памяти с одним и тем же адресом.
а как вывести адрес ссылки &ri & - правильно никак - так нельзя делать ( &&ri )

Другими словами можно создать указатель на указатель и т.д. Но нельзя создавать ссылку на ссылку!

На картинке создаются указатель , потом опять указатель на указатель и т.д.
фотка 1

Яндекс.Метрика