JACHYMKO: jako já jsem popravdě s C stringy celkem spokojen (nebo spíš "smířen")... ale chybí mi nápad, který by mohl vést k "pěknému" for_each() pro běžná C pole.
víceméně jsem měl dva nápady: pro pole pointerů by mohlo pole (např. pole pointerů) končit prvním NULLem nebo nějkaým NIL-symbolem (např. pointer na svůj vlastní začátek - ale tím nepředáš dílčí část pole). a nebo mě napadlo ukládat tu velikost před první prvek - jenže tím taky nepředáš dílčí část pole.
takže ano - u velikosti čehokoliv je tu základní otázka "kam s ní ?". kdybych vymýšlel nějaký "meta-objekt", který by se předával všem funkcím, apod. místo primitivního datového typu, tak by určitě měl dva základní atributy - "kolik toho je" a "kde to je" (třetí atribut by mohl být pointer na pole handlerů ošetřujících základní metody - aneb ještě atribut "co to je").
jenže to už člověk zase vymýšlí nějaký objektový jazyk, a éé... když si to nakousl, tak možnost rozdělit jakýkoliv primitivní string nebo primitivní pole ve stylu "hlava | tělo" (případně v pythoním duchu [offset:délka] ) je prostě intuitivně dobrá.
pokud máš kontejnerový objekt s dalšími informacemi (o jeho velikosti, apod.), tak prostě když chceš předat jeho podmnožinu, tak musíš vytvářet kopii paměti... naproti tomu C stringy, C pole a spojové seznamy (moje oblíbené :-) jsou tři primitivní kontejnerové typy, kde geniálně "přeskakovat začátky". dobře, ne každý algoritmus vyžaduje přeskakovat nějaké začátky :-) ale stejně... není to taková samozřejmost, že něco takového jde.