1 结构体
1、结构体声明
struct 结构体名称
{
结构体成员 1;
结构体成员 2;
结构体成员 3;
}结构体变量名;
或
struct 结构体名称
{
结构体成员 1;
结构体成员 2;
结构体成员 3;
}
int main()
{
struct 结构体名称 结构体变量名;
return 0;
}
2、访问结构体成员
引入一个新的运算符——点号(.)运算符。
比如 book.title 就是引用 book 结构体的 title 成员;而 book.price 则是引用 book 结构体的 price 成员。
3、结构体嵌套
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[128];
char author[40];
float price;
struct Date date;
char publisher[40];
};
#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 publischer[40];
}book = {
"dainixuec",
"xiaojiayu",
48.8,
{2017,11,11},
"qinghuadaxuechubanshe"
};
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.publischer);
return 0;
}
4 结构体数组
struct 结构体名称
{
结构体成员;
} 数组名[长度];
struct 结构体名称
{
结构体成员;
};
struct 结构体名称 数组名[长度];
5 结构体指针
结构体声明:指向结构体变量的指针
struct Book * pt;
pt = &book;
我们知道数组名其实是指向这个数组第一个元素的地址,所以我们可以将数组名直接赋值给指针变量。
但注意,结构体变量不一样,结构体的变量名并不是指向该结构体的地址,所以要使用取地址运算符(&)才能获取其地址:
结构体指针访问结构体成员方法:
(*pt).title
pt->title
点号(.)只能用于结构体,而箭头(->)只能用于结构体指针
Typedef
相比起宏定义的直接替换,typedef是对类型的封装