自定义类型(C语言)

结构体

结构体的声明

结构的基础知识

结构是一些值的集合,这些值为成员变量。结构的每个成员变量可以是不同的类型。

结构的声明

Struct tag //此处的tag为结构体的标签
{
    member-list;
}variable-list;

结构体的定义:

比如,定义一个书的结构,书是不是需要有 书名,书号,作者,价格。

struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;//此处创建的为结构体的全局变量
//此处的sb1,sb2为struct Book类型的变量。
int main()
{
    struct Book sb4 ;//此处为局部变量。
    return 0;
}

匿名结构体类型

struct
{
    char c;
    int i;
    char arr[];
}sb1;
//此处的匿名结构体只能创建全局变量。

此处需要注意的是:

匿名结构体使用的时候只能使用一次,否则会出现下面的现象

struct 
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;
struct {
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1,sb2,sb3;

虽然这两个匿名结构体看起来一样。

但是编译器认为上面的两个声明为不同的两个类型。

所以是非法的。

结构体的自引用

结构体自引用的方式:

struct Node
{
    int data;
   struct Node* n;
};

结构体类型的重命名

typedef struct Node
{
    int data;
    struct Node* next;
}Node;

//给typedef struct Node这个
类型重新起名字 Node



int main()
{
    Node n;
//此时可以省略struct。
    return 0;
}

但是重命名的时候,结构体里面自引用时这个struct不能省略,否则编译器不会运行通过。

结构体的定义和初始化

结构体是什么我们已经大概了解了,接下来我们需要知道结构体如何去初始化。

结构体创建的同时可以顺便创建变量,就是我们上面提到的创建结构体全局变量。

在我们创建结构体变量的同时也可以为其赋值

#include<stdio.h>
struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
}sb1 = { "《c语言结构体》","1345","zhangsan",15 };
//此时就可以为我们的结构体赋值
int main()
{
    struct Book sb4 = { "《c语言》","1385","lisi",45 };
    //我们也可以在创建局部变量时进行初始化。
    printf("%s %s %s %d\n", sb1.name, sb1.id, sb1.author, sb1.price);
    printf("%s %s %s %d", sb4.name, sb4.id, sb4.author, sb4.price);

}

 结构体嵌套

#include<stdio.h>
struct Book
{
    char name[20];
    char  id[20];
    char  author[20];
    int price;
};
struct Bookstore
{
    char Bookstore_name[20];
    char address[20];
    struct Book b;
}sb1 = { "好东西书店","南新街包子店对面 ","《c语言结构体》","1345","zhangsan",15 };


int main()
{
    struct Book sb4 = { "《c语言》","1385","lisi",45 };
    printf("%s %s %s %d\n", sb1.Bookstore_name ,sb1.address,sb1.b.name, sb1.b.id, sb1.b.author, sb1.b.price);
    printf("%s %s %s %d", sb4.name, sb4.id, sb4.author, sb4.price);

}

结构体的知识目前就在这里,过后还会有关于结构体内存对齐的方法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值