sizeof(a)/sizeof(t)
явно кодує тип у виразі. Тепер у вас вказаний тип у кількох місцях, без підтримки компілятора, щоб гарантувати, що ви використовуєте той самий тип. Отже, якщо ви змінили базовий тип масиву, але не в (повністю окремому) виразі підрахунку, бінго: ваш код складеться чудово, але кількість елементів буде неправильним. Якщо вам пощастить, ваша програма вийде з ладу, але якщо ні, то вона буде функціонувати майже повністю коректно, але раз у раз буде вести себе абсолютно химерно.
sizeof(a)/sizeof(a[0])
гарантовано є правильним, вимагаючи лише ім'я масиву. Змініть тип і ви все добре; змінити ім'я масиву, і компілятор подасть скаргу. Не потрібно думати: нам подобається таке програмування.