在C语言中,数据类型被分为基础数据类型和复合数据类型。

对于基础数据类型我们都有了解,如int,char等,但复合数据类型又是什么情况呢?

复合数据类型分为结构、联合、和枚举。这里我们只谈结构(structure)

结构体的声明和定义

struct 【结构体名称】{
成员1;
成员2;
……
} 结构体变量名;*//一定要加分号,这是一个声明的结束。*

例如:声明一种水果的信息

struct fruits{
    char name[20];
    double price;
    double weight;
}a,b,c;

这样我们就成功声明了变量a,b,c;

注意,我们只是声明了a,b,c,并不能给它们赋值,因为对于计算机来说struct{}和int是一个意思,都只是一种类型声明,正如同手搓出一个框架一样。当然,此时struct也是不占用内存的。

  • 我们也可以不加fruits,只声明a,b,c。但这样的结果是我们只能定义a,b,c,不能再定义别的变量。

结构体的使用

说完了声明,我们接下来学学如何使用结构体。

与常见的声明一样,我们可以在定义结构体时就初始化,也可以先定义在使用的时候再初始化。

struct fruits{
    char name[20];
    double price;
    double weight;
}a={"apple",5.8,1.0};
int main()
{
    struct fruits b={"banana",6.8,2.0};
    return 0;
}

结构体的使用也有两种方式,一种是直接引用,另一种是使用指针:
直接引用
使用变量名.成员名

struct fruits{
    char name[20];
    double price;
    double weight;
}a={"apple", 5.8, 1.0};
int main()
{
    struct fruits b={"banana", 6.8, 2.0};
    printf("%s %lf %lf",a.name,a.price,a.weight);
    return 0;
}

使用指针
使用【->】

struct fruits{
    char name[20];
    double price;
    double weight;
}a={"apple", 5.8, 1.0};
int main()
{
    struct fruits b={"banana", 6.8, 2.0};
    struct fruits *p=&b;
    printf("%s %lf %lf",p->name,p->price,p->weight);
    return 0;
}