После этих операторов
P p1 = {NULL, 1};
P p2 = {&p1, 2};
P p3 = {&p2, 3};
у вас есть цепочка (из-за элемента данных Pptr)
p3 -> p2 -> p1 -> NULL
Так что это выражение p3.Pptr->Pptr->i
сначала относится к p2
( p3.Pptr
), а затем в p1
(p3.Pptr->Pptr)
и выводится значение элемента данных i
структуры p1
Это выражение p3.Pptr->i
относится к p2
(p3.Pptr
) и его элемент данных i
выводится.