c语言 - 字符指针数组不应该打印指针吗?为什么它会打印它指向的字符串?



我有下面的代码:

static char *name[] = {
"January",
"February",
"March",
};
printf("%s", name[0]);

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

转换说明符%s将相应的实参解释为指向字符串的第一个字符的指针,直到遇到结束的零字符''

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

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

注意这个声明

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

作为初始化项的字符串字面值被隐式转换为指向其首字符的指针,这些指针存储在数组name中。