为什么以下代码有效:
#include <stdio.h>
int main()
{
int (*daytab)[13];
int no_leap_year[13] = {0,31,28,31,30,31,30,31,30,31,30,31,30};
daytab = &no_leap_year;
system("Pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而以下产生错误和警告:
#include <stdio.h>
int (*daytab)[13];
int no_leap_year[13] = {0,31,28,31,30,31,30,31,30,31,30,31,30};
daytab = &no_leap_year;
int main()
{
system("Pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误消息如下:
error C2040: 'daytab' : 'int' differs in levels of indirection from 'int (*)[13]'
warning C4047: 'initializing' : 'int' differs in levels of indirection from 'int (*)[13]'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么在外面宣布这些声明main()有什么不同.制作daytab和no_leap_year本地或外部如何影响他们的数据类型?
这个说法:
daytab = &no_leap_year;
Run Code Online (Sandbox Code Playgroud)
(和所有其他语句)不允许在函数上下文之外.一些小的重新安排将为您解决:
int no_leap_year[13] = {0,31,28,31,30,31,30,31,30,31,30,31,30};
int (*daytab)[13] = &no_leap_year;
Run Code Online (Sandbox Code Playgroud)