结构体概述
结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义
通俗来讲,结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
结构体的定义
语法:
struct 结构体名
{
结构体成员列表
};结构体的使用
struct 结构体名 变量名
struct 结构体名 变量名 = {成员1值,成员2值……}
定义结构体时顺便创建变量
#include <stdio.h>
#include <string.h>
//结构体的定义
struct book
{
int num;
char name[16];
char author[16];
char press[32];
float price;
//第三种方式:定义结构体时定义变量
}book4,book5 = {3,"小王子","王五","邮电出版社",34},book6 = {.num = 3,.price = 78};
int main(int argc, const char *argv[])
{
//第一种方式:定义完结构体定义变量
struct book book1;
book1.num = 1;
//结构体成员如果是数组,需要用以下方式赋值
//book1.name[0] = 'w';
//book1.name[1] = 'a';
strcpy(book1.name, "C语言");
//book1.name = "C语言"; 错误行为,数组只有定义的时候才可以这样赋值
strcpy(book1.author, "张三");
strcpy(book1.press, "农业大学出版社");
book1.price = 36.5;
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book1.num, book1.name, book1.author, book1.press, book1.price);
//第二种方式,定义结构体变量时赋值
struct book book2 = {2,"C语言","李四","邮电出版社",45.0};
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book2.num, book2.name, book2.author, book2.press, book2.price);
//如果只给部分成员赋值,需要用以下方式
struct book book3 = {
.num = 2,
.name = "C语言",
.press = "邮电出版社",
.price = 45.0,
};
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book3.num, book3.name, book3.author, book3.press, book3.price);
book4.num = 3;
strcpy(book4.name, "C语言");
strcpy(book4.author,"李四");
strcpy(book4.press,"中信出版社");
book4.price = 50;
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book4.num, book4.name, book4.author, book4.press, book4.price);
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book5.num, book5.name, book5.author, book5.press, book5.price);
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
book6.num, book6.name, book6.author, book6.press, book6.price);
return 0;
}结构体数组
作用:将自定义的结构体放到数组中方便维护
语法:struct 结构体名 数组名[元素个数] = {{}, {}, …}
#include <stdio.h>
#include <string.h>
//结构体的定义
struct book
{
int num;
char name[16];
char author[16];
char press[32];
float price;
}Book3[3];
int main(int argc, const char *argv[])
{
int i;
struct book Book[3] = {{1,"C语言", "张三", "邮电出版社",45},\
{2,"C和指针", "李四", "邮电出版社", 34},\
{3,"C陷阱","王五","农业出版社",67}};
struct book Book2[5];
Book2[0].num = 4;
//Book2[0].name = "系统编程"; //错误行为
//Book2[0].name[0] = 'x';
//Book2[0].name[1] = 't';
strcpy(Book2[0].name, "系统编程");
strcpy(Book2[0].author, "周三");
strcpy(Book2[0].press, "农业出版社");
Book2[0].price = 45;
for(i = 0; i < 3 ; i++)
{
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n", \
Book[i].num, Book[i].name, Book[i].author, Book[i].press, Book[i].price);
}
printf("num = %d, name = %s, author = %s, press = %s, price = %f\n", \
Book2[0].num, Book2[0].name, Book2[0].author, Book2[0].press, Book2[0].price);
return 0;
}