K& 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];
}
K&amp; R表示“这是内部静态数组的理想应用”。但为什么会这样呢?为什么不把它变成一个自动指针数组?
答案 0 :(得分:3)
如果数组是自动变量,则每个函数调用都必须初始化13个指针,然后将其中一个返回到调用代码。
将数组作为静态变量,它被初始化一次(在main()
被调用之前,我相信;无论如何,在首次使用该函数之前),然后保持不变。这可能更有效,并且可能效率更高(尽管除非您非常密集地使用month_name()
函数,否则可能无关紧要。)
如果代码中潜伏着一些const
个限定词可能会更好;函数的调用者当然不应该修改结果字符串:
const char *month_name(int n)
{
static const char * const name[] =
{
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
return (n < 1 || n > 12) ? name[0] : name[n];
}