Оператор sizeof
имеет две формы: sizeof(type)
и sizeof expression
. В вашем случае вы можете использовать sizeof(int)
или sizeof loc_buff[0]
или sizeof *loc_buff
с одинаковыми результатами. Обратите внимание, что ()
являются полностью необязательными, если аргумент sizeof
является выражением (а не типом). sizeof
оператор имеет высокий приоритет, что делает эти ()
избыточными в большинстве случаев (включая ваш пример).
Что касается memset
... формально не гарантируется установка loc_buff
элементов на -1
в общем случае. Это memset
гарантированно заполняет память с помощью битового шаблона 0xFF...F
, но то, что этот битовый шаблон означает, что интерпретируется как объект int
, зависит от реализации. На машине с 2-мя дополнителями это действительно -1
, но на машине, отличной от второго, это нечто совершенно другое.
С самой педантичной точки зрения единственное портативное использование memset
имеет с целыми массивами без char, устанавливает все на 0
.
Вопрос не плох. Почему пустые голоса? –
Я не очень хороший программист на C, хотя только начал его использовать. Одна вещь, о которой я могу думать, - это когда вы используете 'sizeof (* loc_buff)', это позволяет отменить, если на более позднем этапе я изменяю тип '* loc_buff' как указатель на' integer', для указателя на 'char/другой тип данных'.Тем не менее вам не нужно беспокоиться о выделенной памяти, поскольку '* loc_fuff' уже определяет его размер как« 4 (для целых чисел)/1 (для символа/etc ». Следовательно, одно изменение типа данных для переменной , не будет вызывать никаких побочных эффектов для остальной части реализованного кода :-) –
Если один пишет 'sizeof (int)', то если на более позднем этапе один раз изменяет тип переменной от 'int' до' newType' , тогда вам нужно прокрутить код, чтобы изменить соответствующий тип в 'sizeof (newType)' thingy. –