Допустим, я объявляю переменную
int a = 5;
Чем будут отличаться два варианта объявления указателя:
int *p;
*p = &a;
и
int *p;
p = &a;
если в обоих случаях
cout<< *p;
выдает одинаковый результат 5?
int *p;
*p = &a;
Отличие будет в том, что этот вариант не скомпилируется, так как вы пытаетесь записать в невыделенную память для целочисленного значения адрес переменной a
Объявления у вас одинаковы -
int *p;
А вот присваивания - разные...
*p = &a;
Присваивание значению по адресу p значения адреса переменной a, что
1. в режиме C++ без дополнительного преобразования является ошибкой и не компилируемо;
2. если бы даже было компилируемо, то в cout << *p вывести 5 могло только по очень невероятной случайности - и то вряд ли: ну не используются обычно такие адреса (а в *p в этом случае находится именно адрес a) для реальных переменных...;
3. записывает неопределенную (ибо переменная p не инициализирована) область памяти, что является UB, могущим в хорошем случае аварийно тормознуть программу.
Второе присваивание
p = &a;
помещает в переменную p адрес a, так что *p представляет собой по сути псевдоним a, и выводимое в этом случае значение cout << *p действительно является значением переменной a.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости