REDGUY: tojsme tu už řešili. nesáhá příliš hluboko, navíc původní C bylo tuším psaný pro tehdejší strojový kód PDP11, aby každá instrukce jazyka byla převoditelná do jedné, nejvýše dvou strojových instrukcí. to je u dnešních procesorů každopádně irrelevantní. (BTW už i na Z80 se daly celé "knihovní funkce" v C převést na jedinou ASM instrukci, např. memcpy() - tolik k debatě inline kód vs. knihovní kód)
o dnešním strojovém kódu dnešních procesorů vím samozřejmě houby, takže směrem "co se děje uvnitř" ve smyslu přepisu do strojového kódu to nemyslím.
myslím to jednoduše tak, že v C pointer do paměti je jen pointer, a pokud nerozvětvím program do více vláken nebo neudělám chybu, tak mi tam ta paměť sedí - dokud jí nedealokuju, neopustím scope, apod.
příkladem toho, jak i situace ve vyšších jazycích může být zmatená, je platný Python zápis
[ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ]
kde laika zmate, že výsledek setřídění je vzápětí garbage collectorem zahozen (a pokud bychom se před to pokusili dát přiřazení, tak překvapivě - získáme pointer na metodu sort, aspoň moje pokusy k něčemu takovému vedly :-)
V C by aspoň (některé) překladače vydaly warning "pozor, výsledek bude zahozen" ("value computed but not used") - to se někdy děje, když např. použijeme operátor ',' (čárka), který funguje skoro jako ; ... akorát že je to pořád operátor a umožňuje prasit uvnitř aritmetického výrazu (to ale není nic, co by se vám stalo při dodržování alespoň strukturovaného stylu programování z 80tých let, když ne přímo pozdějšího objektového :-) (akorát že C to dělá jen pro primitivní typy, protože žádné nativní kontejnery nepodporuje - dokonce i obyčejné pole je v C jen syntaktický cukr nad přičítáním offsetu k pointeru :-)