字符指针数组不应该打印一个指针吗?为什么它打印它指向的字符串?

Shouldn't a character pointer array, print a pointer? Why does it print the string it is pointed to?

我有以下代码:

    static char *name[] = {
            "January",
            "February",
            "March",
    };

    printf("%s", name[0]);

当我用 name[0] 传递 printf 时,它打印 January。但是它不应该打印一月的 address 吗,因为上面的数组存储了一个 pointer 到一月?

转换说明符 %s 将相应的参数解释为指向输出字符串的第一个字符的指针,直到遇到终止零字符 '[=13=]'

如果你想输出指针本身那么你应该写

printf( "%p", ( void * )name[0] );

注意此声明中的内容

static char *name[] = {
        "January",
        "February",
        "March",
};

用作初始值设定项的字符串文字被隐式转换为指向其第一个字符的指针,这些指针存储在数组 name.