Примеры использования указателей

142
26 сентября 2019, 19:30

Пытаюсь разобраться в указателях. Увидел такие примеры, но не нашёл что они делают. Зачем используются эти варианты?

  1. *int *pa;
  2. int *(*pa);
Answer 1

В первом случае будет ошибка компиляции. Второму примеру аналогична вот эта запись.

int ** pa;

то есть так называемый "Указатель на указатель на int". Работает он по принципу обычного указателя, то есть вы можете его разыименовать для получения значения, которое храниться по данному адресу. А поскольку в "первой звездочке" храниться еще один указатель, то при разыименовании Вы получите адрес переменной

int pa

Для получения значения из "Указателя на указатель", его нужно разыменовать дважды вот так.

int a = 5;
int *pa = &a;
std:cout << *pa;

Обратите внимание, что инициализировать указатель на указатель в одну строку нельзя.

//Нельзя вот так
int a = 5;
**pa = &&a;

Это связано с тем, что оператор & требует в качестве значения I-value, но в этом случае значение r-value.

Однако если поддерживается С++11 можно разыменовать указатель на указатель через null

 int **pa = nullptr;

В первом и втором случае выведется число 5.

READ ALSO
Обработка ввода и клика в WM_COMMAND

Обработка ввода и клика в WM_COMMAND

После запуска ни на что не реагирует

152
Events QGraphicsSceneMouseEvent работают, только если graphicsview активно qt

Events QGraphicsSceneMouseEvent работают, только если graphicsview активно qt

Как сделать так, чтобы при запуске программы сразу graphicsview становился активным и события срабатывалиА то необходимо сначала кликнуть на сцену

143
Перегрузка оператора. Сложение дробей

Перегрузка оператора. Сложение дробей

Изменяю код, в расчёте, может быть кому-нибудь пригодитсяЗадача: Даны две дроби a/b и c/d

158
Как запустить gradle task в отдельном .gradle файле

Как запустить gradle task в отдельном .gradle файле

Как запустить gradle task в отдельномgradle файле до assembleDebug

131