Замечание DeiDei возможно, я просто объясню больше здесь
Мы находимся в C, и для упрощения рассмотрим x и d не макросы.
x = **(&d);
эквивалентно x = *d;
, потому что для получения адреса разыменование ничего не делает
Теперь вопрос состоит в том, чтобы найти контекст, в котором x = *d;
является допустимым, для этого d должен быть указателем. Пусть скажут int * d;
Вероятно, цель также состоит в том, чтобы не иметь ошибки сегментации, поэтому d необходимо запомнить действительный адрес. Пусть скажут int a; int * d = &a;
Теперь мы присваиваем x с *d
, поэтому тип x должен быть совместим с int Пусть скажем int a; int * d = &a; x = **(&d);
Чтобы быть чистыми, мы не хотим получать доступ к неинициализированному значению, потому что x наконец получает значение a , которое должно быть инициализировано.
int a = 0; int* d = &a; int x; x = **(&d);
от DeiDei совместимо с требованием, но, конечно, они являются множеством других решений