以下代码如何运作:
#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;
}
而以下内容会生成错误和警告:
#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;
}
错误消息如下:
error C2040: 'daytab' : 'int' differs in levels of indirection from 'int (*)[13]'
warning C4047: 'initializing' : 'int' differs in levels of indirection from 'int (*)[13]'
我不明白为什么在main()
之外宣布这些声明会有所不同。如何使daytab
和no_leap_year
本地或外部影响其数据类型?
答案 0 :(得分:9)
本声明:
daytab = &no_leap_year;
(以及所有其他语句)不允许在函数上下文之外。一些小的重新安排会为你解决:
int no_leap_year[13] = {0,31,28,31,30,31,30,31,30,31,30,31,30};
int (*daytab)[13] = &no_leap_year;
答案 1 :(得分:0)
正如Carl Norum所说,你不能写下这句话:
daytab = &no_leap_year;
在函数之外只是因为这是您正在执行的赋值操作,并且在main()
或任何其他函数之外不允许赋值操作,您必须为函数外部的每个数据类型定义存储类。