Я не знаком с:
char buffer[1024] = {0};
техник. Но если предположить, что это делает то, что я думаю, есть (потенциальное) различие между этими двумя методами.
Первый выполняется во время COMPILE, и буфер будет частью статического образа исполняемого файла и, следовательно, будет 0 при загрузке.
Последнее будет сделано в RUN TIME.
Первое может привести к некоторому поведению во время загрузки. Если у вас просто есть:
char buffer[1024];
современные загрузчики вполне могут "виртуально" загрузить это ... то есть, это не займет реального места в файле, это будет просто инструкция загрузчику вырезать блок, когда программа загружен. Мне не очень комфортно с современными грузчиками, говорят, правда это или нет.
Но если вы предварительно инициализируете его, то это, безусловно, нужно будет загрузить из исполняемого файла.
Имейте в виду, ни один из них не оказывает "реального" влияния на производительность в малом. Их может и не быть в "большом". Просто сказать, что здесь есть потенциал, и эти две техники на самом деле делают что-то совершенно другое.