Usein tietueet ja oliot välitetään osoitteiden tai viitteiden avulla, vaikkei niitä olisikaan tarkoitus muuttaa aliohjelmassa. Tähän on syynä se, että parametrin välityksessähän kopioidaan kutsumuuttujien arvot aliohjelman lokaaleihin muuttujiin. Tietueiden tapauksessa kopiointi saattaa olla isokin, ja tämän vuoksi osoitteen välityksessä menee pelkkä osoite, ei koko tietueen sisältö.
int vertaa_pvm(Pvm_tyyppi pv1, Pvm_tyyppi pv2) { ... } ... int ero; Pvm_tyyppi pvm1,pvm2; ero = vertaa_pvm(pvm1,pvm2); /* Oikein, mutta iso kopiointi */ if ( ero < 0 ) printf("Pvm1 on ensin!\n");
Parametrin välitys osoitteiden avulla kopioinnin välttämiseksi:
int vertaa_pvm(Pvm_tyyppi *pv1, Pvm_tyyppi *pv2) { ... } ... int ero; Pvm_tyyppi pvm1,pvm2; ero = vertaa_pvm(&pvm1,&pvm2); /* Oikein */ if ( ero < 0 ) printf("Pvm1 on ensin!\n");
Tällöin tietysti aliohjelman kirjoittajan on oltava huolellinen, ettei muuta pv1 ja pv2 osoitteiden osoittamia päivämääriä! Usein tätä kommentoidaan const esittelyllä:
int vertaa_pvm(const Pvm_tyyppi *pv1, const Pvm_tyyppi *pv2) { ... } ...