1

以下代码如何工作:

#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()什么不同。制作daytabno_leap_year本地或外部如何影响它们的数据类型?

4

2 回答 2

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;
于 2013-06-21T23:41:58.890 回答
0

正如卡尔·诺鲁姆(Carl Norum)所指出的,您不能编写以下语句:

daytab = &no_leap_year;

在函数之外仅仅因为这是您正在执行的赋值操作并且在外部或任何其他函数中不允许赋值操作main(),您必须为函数外部的每个数据类型定义存储类。

于 2013-06-22T03:37:45.327 回答