Tipul void (gol) se comportă sintactic ca tipul principal. Cu toate acestea, acesta poate fi folosit doar ca parte a unui tip derivat, obiecte de tipul void nu există. Se utilizează pentru a indica faptul că funcția nu returnează o valoare sau ca tip de bază pentru indicatori către obiecte de tip necunoscut.
void f () // f nu returnează void * pv; // indică un obiect de tip necunoscut
O variabilă de tip void * poate fi atribuită unui indicator de orice tip. La prima vedere, acest lucru nu pare deosebit de util, deoarece voidul * nu poate fi dereferențiat, dar această restricție face ca acest lucru să nu fie util. De cele mai multe ori, este folosit pentru a transmite pointerilor către funcții care nu vă permit să faceți o presupunere despre tipul obiectului și să vă întoarceți din funcțiile obiectelor unite. Pentru a utiliza un astfel de obiect, trebuie să aplicați o conversie de tip explicită. Astfel de funcții sunt de obicei localizate la cel mai scăzut nivel al sistemului, unde se efectuează lucrările cu resurse hardware de bază. De exemplu:
int * pi; char ** cpp; // pointer la un pointer la char int (* vp) [10]; // pointer la un vector de 10 int'ov int (* fp) (char, char *); // indicatorul funcției // parametrii de primire (char, char *) // și întoarcerea int
Variabila indicată de p este c1, iar valoarea stocată în c1 este "a", deci valoarea * p atribuită c2 este "a".
Deasupra pointerilor, puteți efectua unele operații aritmetice. Aici, de exemplu, o funcție care numără numărul de caractere dintr-o linie (care nu include sfârșitul 0):
Indicatorii pentru funcții pot fi foarte folositori; acestea sunt discutate în # 4.6.7.