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

C 指向仅在main()内工作的数组的指针,c,arrays,pointers,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; } 我不明白为什么把这些声明放在main之外会有什么不同。将daytab和no

以下代码是如何工作的:

#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;
}
我不明白为什么把这些声明放在main之外会有什么不同。将daytab和no_leap_year设置为本地或外部会如何影响其数据类型?

此声明:

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;
本声明:

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;

正如Carl Norum指出的,你不能写这句话:

daytab = &no_leap_year;

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

如Carl Norum所述,您不能编写以下语句:

daytab = &no_leap_year;

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

this:daytab=&no\u leap\u year;是语句,而不是声明。错误消息不清楚,因为编译器知道语句不能出现在该上下文中,因此假定daytab=&no\u leap\u year;是一个声明,未指定的类型默认为int。This:daytab=&no\u leap\u year;是语句,而不是声明。错误消息不清楚,因为编译器知道语句不能出现在该上下文中,因此假定daytab=&no\u leap\u year;是一个声明,未指定的类型默认为int。有一点我不明白,我写了与此相同的语句:“daytab=no_leap_year;”它显示了警告,为什么?,任何数组的名称都表示其第一个元素的地址,“&”运算符也会这样做,所以为什么会出现此警告。数组不是指针。关于stack overflow有数百个问题和答案,您可以阅读更多关于差异的信息,或者您可以查看comp.lang.c常见问题解答。有一件事我不明白,我写了与此相同的声明:“daytab=no_leap_year;”它显示了警告,为什么?,任何数组的名称都表示其第一个元素的地址,“&”运算符也会这样做,所以为什么会出现此警告。数组不是指针。有数百个关于堆栈溢出的问题和答案可以阅读更多关于差异的信息,或者您可以查看comp.lang.c常见问题解答。