初始化静态指针数组

时间:2014-08-30 15:55:23

标签: c

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表示“这是内部静态数组的理想应用”。但为什么会这样呢?为什么不把它变成一个自动指针数组?

1 个答案:

答案 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];
}