Я читаю «Программирование на языке King KN» и нашел следующее утверждение:
Мы обсудили использование выражения
sizeof(a)/sizeof(a[0])
для вычисления количества элементов в массиве. Выражениеsizeof(a)/sizeof(t)
, где t - это тип элементов a, также будет работать, но оно считается плохой техникой.
Почему это считается плохой техникой?
Ответы:
sizeof(a)/sizeof(t)
явно кодирует тип в выражении. Теперь у вас есть тип, указанный в нескольких местах, без поддержки компилятора, чтобы гарантировать, что вы используете тот же тип. Итак, если вы измените базовый тип массива, но не в (полностью отдельном) выражении count, bingo: ваш код будет скомпилирован очень хорошо, но количество элементов будет неправильным. Если вам повезет, ваша программа потерпит крах, но если нет, то она будет работать почти полностью правильно, но время от времени будет вести себя совершенно странно.sizeof(a)/sizeof(a[0])
гарантированно будет правильным, требуя только имя массива. Измените тип, и все в порядке; измените имя массива, и компилятор будет жаловаться. Не нужно думать: нам нравится такое программирование.источник
sizeof a/sizeof*a
, хотя это не очень существенная разница.