1. Pole v C je vždy pointer. Pole ako také nie je samostatný prvok, vždy ho musíš zapísať ako "ukazateľ na prvý prvok poľa". Takže áno, keď ho predávaš do funkcie, musíš predať "ukazateľ na prvý prvok poľa" - a to je tá premenná typu ukazateľ (char*).
2.
znamená, že funkcia vracia "nejakú adresu", alebo inak "nejaký pointer". void znamená to "nejaký" - void je žiadny/nedefinovaný typ a hviezdička znamená pointer.
Ak by si napísal toto
, tak funkcia vracia práve to pole ukazateľov z prvého bodu (resp ten ukazateľ na prvý prvok poľa).
3. Typ
string a znak
& sú už vecou C++
(pokiaľ viem, C ich stále nemá, ale môžem sa mýliť). Znak
& je referencia - povedzme že taký jednoduchší pointer a typ
string zapuzdruje pole charov.
Toto znamená, že do funkcie predávaš string bežným spôsobom - celá premenná sa musí skopírovať a predať do funkcie. To očividne zaberie ďalšie miesto a kopírovanie môže aj nejakú dobu trvať.
Toto znamená, že do funkcie predávaš string ako referenciu - čiže premenná sa nemusí kopírovať, ale pracuje sa rovno s tou "vonku" (čiže ak aj premennú vo funkcii zmeníš, prejaví sa to rovno aj mimo funkciu).
No a toto je "bezpečné" predanie premennej cez referenciu - const zaručí, že premenná sa vo funkcii môže len čítať, nie meniť (takže si ju nemôžeš napr. náhodou prepísať a za funkciou sa čudovať, že ti niečo nefunguje...)