В основном все, что здесь происходит, зависит от базовой реализации вашей системы. Вы вызываете неопределенное поведение, обращаясь к значению неинициализированной переменной (в данном случае указателя, который представляет собой переменную, которая содержит адрес виртуальной памяти).
Если ваша система не замечает или не заботится он, вероятно, просто распечатает значение регистра, который компилятор использует для ppi, который, вероятно, равен 0x0 (nil) или, возможно, совершенно произвольному значению.
Неопределенное поведение не означает, что будет ошибка сообщение или программа выдаст sh или что-нибудь вообще, это просто означает, что язык программирования C не гарантирует какого-либо специфического поведения c, поэтому все, что компилятор решит сделать, полностью допустимо. Это - хорошее прочтение, если вы хотите узнать больше