【发布时间】:2012-02-07 22:49:56
【问题描述】:
我研究过 C 指针,想知道为什么编译器会在以下代码中发出不兼容的指针类型错误:
#include <stdio.h>
const char *months(int n);
int main() {
char **p = months(2);
printf("%s", **p);
}
const char *months(int n) {
const char *m[] = {
"Invalid month",
"January",
"February",
"March",
"Aprli"
};
return (n == 0 || n > 12) ? m[0] : m[n];
}
我希望 printf 将“二月”显示为月份,但我得到了那个错误 “使用 'const char *' 类型的表达式初始化 'char **' 的不兼容指针类型” 在编译过程中。
如果月份函数没有错误,则返回指向“n”个月的指针。接下来我创建一个指针 p 来指向月份函数的结果。
这里有什么问题?
【问题讨论】:
-
声明并使用
p作为指向 char 的指针,而不是指向指向 char 的指针。 -
您可能还想在
months()函数中检查是否为负n。
标签: c