天天看点

结构体数组和结构体指针

文章目录

        • 结构体嵌套
        • 结构体数组
        • 初始化结构体数组
        • 结构体指针
          • 指针访问成员方法

结构体嵌套

比如上篇博客的代码

struct Book
{
    char title[128];
    char author[40];
    float price;
    unsigned int date;
    char publisher[40];
    
};
           

可以把date单独再定义成一个结构体

struct Date
{
int year;
int month;
int day;
};
struct Book
{
    char title[128];
    char author[40];
    float price;
    struct Date date;//别忘记了struct这个前缀
    char publisher[40];
    
}book={"dainixue","yuyijie",48.8,{2017,1,1},"jiangsudaxue"};//这里直接初始化



printf("date is: %d-%d-%d\n",book.date.year,book.date.month,book.date.day);
           

结构体数组

每个数组都是一个结构体的数据

定义方法:

1.在声明结构体的时候进行定义

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

2.先声明一个结构体类型,再用此类型定义一个结构体数组

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

初始化结构体数组

结构体数组和结构体指针

结构体指针

指向结构体变量的指针

struct Book *pt;

我们知道数组名其实是指向数组的第一个元素的地址,所以可以将数组名直接赋值给指针变量,但要注意,结构体变量不一样,结构体变量名并不指向结构体的地址,所以要进行取值,必须要用取址运算符 &。

pt=&book;

指针访问成员方法

1.

(*结构体指针).成员名

2.

结构体指针->成员名

//箭头只能用于指针

两种方法在实现上完全等价

struct Book *pt;
pt=&book;
printf("name: %s\n",(*pt).title);
printf("name: %s\n",pt->title);
           

继续阅读