c语言结构数组,如何创建外部数组和静态数组

c语言结构数组,如何创建外部数组和静态数组c语言结构数组,自动存储类别的数组信息存储在栈中,数据大容易出问题,比如
......
int main()
{
struct book library[100];
......
}
那么如何创建外部数组和静态数组,举个例子,谢谢。

外部变量就是引用外部文件的变量(非静态)

静态变量与全局变量相似,区别是静态变量只能在定义的函数内被调用。

静态变量与局部变量区别:静态变量不会自动释放,函数调用结束后,值依然保留。静态变量定义时赋初值,只有一次,多次调用函数,不会反复赋初值。如果没有初值,静态变量也会自动赋初值。

关于数组定义在栈中维度大小受限,想要定义在堆中,可以用malloc申请。

详细看我写的案例备注吧。

#include<stdio.h>
#include"externFile.c"//外部文件
#include<malloc.h>
extern struct book2 b2;//外部变量:这里的结构变量b2是使用的externFile.c文件中的变量(externFile.c和本文件在同一个目录下)

extern struct book3 b3;
typedef struct book//这里申明的是结构类型
{
    int id;
};
int test();
int main()
{
    int size;
    b2.id=100;
    //b3.id=100;这里会报错,因为b3是外部的静态全局变量,无法引用
    printf("外部结构变量b2.id=%d\n",b2.id);
    size=10000;
    struct book *bkp=(struct book *)malloc(sizeof(struct book)*size);//用堆 定义结构数数,size是大小,这里相当于定义了struct book bkp[10000]
    bkp[0].id=100;
    printf("malloc申请了%d大小的结构数组空间,bkp[0].id=%d\n",size,bkp[0].id);



    test();//该函数调用后,其局部变量被赋值。对比两次调用,可见静态变量保留值功能
    test();

    return 0;
}
int count=0;
int test()
{
    struct book bk1={0};//局部变量:这里结构数组变量是自动存储,存放在栈中。只在本函数适用,每调用结束,自动释放,值不保留。
    static struct book bk2;//静态局部变量:每次调用函数,值保留,不自动释放。静态变量即使没有初值,会自动赋初值0/
    count++;
    printf("第%d次调用函数,局部变量bk1.id=%3d,静态局部变量bk2.id=%3d,之后给两个成员都赋值100\n",count,bk1.id,bk2.id);
    bk1.id=100;
    bk2.id=100;
}

//externFile.c文件
#include<stdio.h>

struct book2
{
int id;
};
struct book3
{
int id;
};

struct book2 bk2;
static struct book3 bk3;//b3是静态全局变量,无法通过extern被外部调用

温馨提示:答案为网友推荐,仅供参考
相似回答