printf("%x" ) t'affiche un int en valeur hexa. point.
si tu passes un int tu as la valeur d'un int.
si tu passes un pointeur tu as -par chance- la valeur du pointeur (because taille int == taille adresse, ce qui n'est pas toujours le cas).
si avec un printf("%x",t[.... tu vois ce que tu penses être une adresse marche c'est parceque le compilo t'as sorti l'adresse vu que c'était à ce moment ce qui tu est le plus censé vu le type de 't')
un 't[][]', avec printf("%x",t[i]) te donnera une adresse.
un 'int t[]', avec printf("%x",t[i]) te donnera la valeur de t[i] est non son adresse, printf n'en sait rien c'est le compilo qui l'a passé en paramètre.
ensuite pour avoir une adresse formattée correctement avec printf, c'est %p pas %x (mais on s'en fout ça reste compréhensible).
la chose qu'il faut que tu comprennes c'est que printf il affiche ce que est sur sa pile, et si tu mets des conneries il t'affiche des conneries, ça ne prouve rien en soit.
et si je te dis qu'avec un:
t[100][16]
printf("%x", t[0]) t'afficheras une valeur, mettons 11000
et que
printf("%x", t[1]) t'afficheras 11010.
parceque le compilo aura passé automatiquement et implicitement l'adresse de l'élement t[0] et t[1], sous-entendu t[0][0] et t[1][0].
tu commençes a saisir où il faut que je te le fasse en décimal ?