sizeof(a)/sizeof(t)
codifica explicitamente o tipo na expressão Agora você tem o tipo especificado em vários locais, sem suporte do compilador para garantir que você está usando o mesmo tipo. Portanto, se você alterar o tipo base da matriz, mas não na expressão de contagem (completamente separada), bingo: seu código será compilado muito bem, mas sua contagem de elementos estará incorreta. Se você tiver sorte, seu programa falhará, mas, caso contrário, funcionará quase completamente corretamente, mas de vez em quando se comportará de maneira totalmente bizarra.
sizeof(a)/sizeof(a[0])
é garantido que esteja correto, exigindo apenas o nome da matriz. Mude o tipo e você está bem; mude o nome do array e o compilador irá reclamar. Não é necessário pensar: gostamos desse tipo de programação.