调用子函数返回的数组为什么会出现这样的数?这些数是地址吗?

我试过把子函数化作主函数,定义好输入数组并输出g[],是没有问题的,运行结果为1 0 0 0 1 0 0 0,不像这种返回是特别大的数


#include<stdio.h>
#define N 8
#define M 63
int *SCHS(int f[]){

    int i,g[N];
    for(i=0;i<N;i++)
    {
        if(f[i]==1)
            g[i]=i;
        else
            g[i]=0;
    }
    for(i=0;i<N;i++)
        g[i]=g[i]+f[i];

    for(i=0;i<N;i++)
    {
        if(g[i]%2)
            g[i]=1;
        else
            g[i]=0;
    }
    return g;
}

    void main(){
        int *a,*b;
        int f1[8]={1,0,0,0,1,0,0,1};
            a=SCHS(f1);
            printf("\n");
        for(int i=0;i<N;i++)
        {
        printf("%d ",a[i]);
        }
        printf("\n");//
        while(1);
    }

这是运行结果,很奇怪
![Valid XHTML]图片说明

这些不是地址,而是因为数组越界了,或者没有初始化,访问到了随机的数据。