К & R демонстрирует пример инициализации массива указателей следующим образом:Инициализация статических массивы указателей
char *month_name(int n)
{
static char *name[] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
return (n < 1 || n > 12) ? name[0] : name[n];
}
К & Р гласит, что «это идеальное приложение для внутреннего статического массива». Но почему это так? Почему бы просто не сделать это автоматическим массивом указателей?
Автоматический массив требует инициализации каждый раз, когда он вызывается. Я бы предложил: скомпилировать обе версии кода и посмотреть на сгенерированную сборку. – wildplasser
Я недостаточно опыт, чтобы разобрать этот комментарий. Что это мне скажет? – George
Большинство отладчиков позволят вам просмотреть код сборки, сгенерированный компилятором. Посмотрев на код сборки, вы можете много узнать о том, как работает компилятор, и вы обязательно научитесь тому, что сделает вас лучшим программистом на C. Конечно, предварительным условием является то, что вы узнаете, как читать язык ассемблера используемого вами процессора. – user3386109