un char c'est un type entier, de la famille des int, short et long. Il peut être signé ou pas (signed / unsigned). "char" est signé ou pas en fonction de ton environnement. C'est juste sa représentation interne dont il est question, ça reste dans tous les cas une 'lettre' dans un alphabet de 256 lettres. char, signed char et unsigned char sont 3 types distincts.
Ton code est faux, puisque chaine est traduite en pointeur en argument de ton printf, et un pointeur, ce n'est pas un entier. Par contre, prinf("%d", chaine[0]); ça va fonctionner.