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

时间:2013-06-21 23:39:10

标签: 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;
}

而以下内容会生成错误和警告:

#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本地或外部影响其数据类型?

2 个答案:

答案 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()或任何其他函数之外不允许赋值操作,您必须为函数外部的每个数据类型定义存储类。