С селектором (. или ->) все просто. С т.з. ассемблера f(struct* s,...) - это передача в стек вызова функции базового адреса для последующей относительной адресации, а addr->value - это сама относительная адресация. Типа
"доставка посылки"("Улица Гагарина",...){
"Дом 9" ="Улица Гагарина" ->"Дом 9"
if ("Дом 9"->"кв.18"->"посылку получали" == "нет"){
"Дом 9"->"кв.18"->"посылка" = ...
"Дом 9"->"кв.18"->"вес посылки" = ...
"Дом 9"->"кв.18"->"посылку получали" = "да"
}
}