小甲鱼_带你学C带你飞_p43 结构体数组和结构体指针

p43 结构体数组和结构体指针

结构体嵌套

  • 对于出版日期可以单独为它声明一个结构体类型

    struct Date
    {
    	int year;
        int month;
        int day;
    };
    
    # include<stdio.h>
    struct Date{
        int year;
        int month;
        int day;
    }; // 加分号,因为它是一个完整的声明语句
    
    struct Book{
        char title[128];
        char author[40];
        float price;
        struct Date date;
        // 用另一个结构来代替
        char publisher[40];
    } book = {"带你学C带你飞",
             "小甲鱼",
             48.8,
              {2017,11,11},
              "清华大学出版社"
             };
    // 在一个结构体里面有另一个结构体作为它的一个成员
    int main(void)
    {
        printf("书名 : %s\n",book.title);
        printf("作者 : %s\n",book.author);
        printf("售价 : %.2f\n",book.price);
        printf("出版日期 : %d-%d-%d\n",book.date.year,book.date.month,book.date.day);
        printf("出版社 : %s\n",book.publisher);
        
        return 0;
    }
    

    结构体数组

    • 上面是描述一本书籍信息的结构体,我们要把它搞成一个系列,那可以使用结构体数组,依次进行存放。

    • 结构体数组概念与数组一致,只不过每个数组元素不再是基础的元素类型。每个数组元素都包含该结构体的所有成员。

    • 第一种方法是在声明结构体的时候进行定义:

      struct 结构体名称
      {
          结构体成员;
      } 数组名[长度];
      
      • 第二种方法是先声明一个结构体类型(比如上面Book),再用此类型定义一个结构体数组:

        struct 结构体名称
        {
        	结构体成员;
        };
        struct 结构体名称 数组名[长度];
        

初始化结构体数组

struct Book book[3] ={
	{"《零基础入门学习Python》","小甲鱼",49.5,{2016,11,11},"清华大学出版社"},
	{"《零基础入门学习Scratch》","不二如是",49.9,{2017,10,1},“清华大学出版社”},
	{"《带你学C带你飞》","小甲鱼",49.9,{2017,11,11},"清华大学出版社"}
};

结构体指针

  • 指向结构体变量的指针,称为结构体指针

    struct Book *pt;
    // 声明一个指向Book结构体类型的指针变量pt,必须使用取值运算符
    pt = &book;
    
    • 结构体的变量名不是指向结构体的地址。

      • 通过结构体指针访问结构体成员有两种方法:

        (*结构体指针).成员名
        /*通过*运算符对结构体指针,进行一个解引用,像一个普通的结构体运算符去
         访问成员*/
        结构体指针 -> 成员名
        /* .用于结构体对象,->用于指针*/
        
# include<stdio.h>
struct Date{
    int year;
    int month;
    int day;
}; // 加分号,因为它是一个完整的声明语句

struct Book{
    char title[128];
    char author[40];
    float price;
    struct Date date;
    // 用另一个结构来代替
    char publisher[40];
} book = {"带你学C带你飞",
         "小甲鱼",
         48.8,
          {2017,11,11},
          "清华大学出版社"
         };
// 在一个结构体里面有另一个结构体作为它的一个成员
int main(void)
{
    struct Book *pt;
    pt = &book;
    printf("书名 : %s\n",(*pt).title);
    printf("作者 : %s\n",(*pt).author);
    printf("售价 : %.2f\n",(*pt).price);
    printf("出版日期 : %d-%d-%d\n",pt->date.year,pt->date.month,pt->date.day);
    printf("出版社 : %s\n",pt->publisher);
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值