指向仅在main()内部工作的数组的指针

eri*_*sse 1 c arrays pointers

为什么以下代码有效:

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

Car*_*rum 9

这个说法:

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)