结构体声明
struct 结构体名称
{
结构体成员1;
结构体成员2;
结构体成员3;
......
};
举个栗子:
图书名称
图书作者
图书售价
出版日期
出版社
ISBN号
写成代码如下:
struct Book
{
char title [128];
char author [40];
float price;
unsighed int date;
char publisher [40];
};//分号不要忘了
结构体声明只是一个框架的描绘
定义结构体类型变量
/*语法*/
struct 结构体名称 结构体变量名
两种方式
/*结构体既可以放在main里面,也可以放在外面,在外面是全局变量,在里面是局部变量*/
第一种
#include <stdio.h>
/*放在main里面做 局部变量*/
struct Book//结构体的名字
{
char title [128];
char author [40];
float price;
unsighed int date;
char publisher [40];
};//分号不要忘了
int main(void)
{
struct Book book;//book是 变量名 这才定义了book的结构体 放在这儿是局部变量
return 0;
}
第二种
#include <stdio.h>
/*结构体既放在外面,在外面是全局变量*/
struct Book//结构体的名字
{
char title [128];
char author [40];
float price;
unsighed int date;
char publisher [40];
} book;//分号不要忘了,分号前加book也可以定义变量名 这是全局变量
int main(void)
{
return 0;
}
访问结构体变量
介绍一个运算符——点号(.)运算符
比如说:
book.title就是引用book结构体的title成员,它是一个字符数组(title是字符型)。
book.price则是book结构体的price成员,它是一个浮点型的变量(price是价格当然用浮点型表示)。
写一个简单的书籍录入程序
#include <stdio.h>
struct Book//结构体的名字
{
char title [128];
char author [40];
float price;
unsighed int date;
char publisher [40];
} book;//分号不要忘了,分号前加book也可以定义变量名 这是全局变量
int main(void)
{
printf("请输入书名:" );
scanf("%s", book.title);//引用结构体book
printf("请输入作者:");
scanf("%s", book.author);
printf("请输入售价:");
scanf("%f", &book.price);//取地址符勿忘
printf("请输入出版日期:");
scanf("%d", &book.date);
printf("请输入出版社:");
scanf("%s", book.publisher);
printf("\n=====数据录入完毕=====");
/*打印出来*/
printf("书名:%s\n", book.title);
printf("作者:%s\n", book.author);
printf("售价:%f\n", book.price);
printf("出版日期:%d\n", book.date);
printf("出版社:%s\n", book.publisher);
return 0;
}
初始化结构体变量
举个栗子 算一算
#include<stdio.h>
int main()
{
struct A
{
char a;
int b;
char c;
} a = {'x', 520, '0'};
printf("size of a = %d\n", sizeof(a));
}
size of a 等于多少呢
你以为是1+4+1 = 6
.。。。。
其实答案 12
为什么呢?
因为会进行内存的对齐
- 对齐前与对齐后
再调整一下啊
#include<stdio.h>
int main()
{
struct A
{
char a;
char c;
int b;
} a = {'x','o',520};
printf("size of a = %d\n", sizeof(a));
}
如图:占了8个字节