结构体
//
// Created by a1073 on 2019/7/6.
//
#include <stdio.h>
struct Book{
char title[128];
char author[40];
float price;
unsigned int date;
char publisher[40];
}book;
/*
* 在结构处声明变量 此变量是一个全局变量
* 如果在main函数声明变量
* struct Book book;
* 此时book为局部变量*/
int main(void) {
printf("请输入书名:\n");
scanf("%s", book.title);
printf("请输入作者名:\n");
scanf("%s", book.author);
printf("请输入价格:\n");
scanf("%f", &book.price);
printf("请输入日期:\n");
scanf("%d", &book.date);
printf("请输入出版社:\n");
scanf("%s", book.publisher);
printf("============数据录入完毕===========\n");
printf("书名:%s\n", book.title);
printf("作者名:%s\n", book.author);
printf("价格:%.2f\n", book.price);
printf("日期:%d\n", book.date);
printf("出版社:%s\n", book.publisher);
return 0;
}
结构体初始化
//
// Created by a1073 on 2019/7/6.
//
#include <stdio.h>
int main(void) {
struct A {
char a;
int b;
char c;
} a = {'x', 520, 'o'};
printf("a.a = %c, a.b = %d, a.c = %c\n", a.a, a.b, a.c);
printf("sizeof(a) = %d\n", sizeof(a));
/*
* 内存对齐*/
return 0;
}
结构体嵌套
//
// Created by a1073 on 2019/7/6.
//
#include <stdio.h>
struct Date {
int year;
int month;
int day;
};
struct Book {
char name[48];
struct Date date;
} book = {
"c语言从入门到放弃",
{2019, 07, 06}
};
/*
* 结构体的嵌套
* 结构体的嵌套初始化*/
int main(void) {
printf("%s\n", book.name);
printf("%d-%d-%d\n", book.date.year, book.date.month, book.date.day);
return 0;
}
结构体指针
//
// Created by a1073 on 2019/7/6.
//
#include <stdio.h>
/*
* .运算符 结构体对象调用结构体成员
* ->运算符 结构体指针调用结构体成员
* 结构体指针使用方法:
* (*结构体指针).结构体成员
* 结构体指针->结构体成员
* 二者相同*/
struct Time {
int year;
int month;
int day;
} time = {1998, 1, 1};
int main(void) {
struct Time *pt;
pt = &time;
printf("%d\n", (*pt).day);
printf("%d\n", pt->day);
return 0;
}
结构体之间赋值
//
// Created by a1073 on 2019/7/7.
//
#include <stdio.h>
int main(void) {
struct Test{
int x;
int y;
}t1, t2;
t1.x = 1;
t1.y = 2;
t2 = t1;
/*
* 两个结构之间可以赋值*/
printf("t2.x = %d, t2.y = %d\n", t2.x, t2.y);
return 0;
}
传递结构体参数
//
// Created by a1073 on 2019/7/7.
//
#include <stdio.h>
struct Date6{
int year;
int month;
int day;
};
struct Book6{
char title[48];
struct Date6 date6;
};
struct Book6 getInput(struct Book6 book6){
printf("请输入时间\n");
scanf("%d-%d-%d",&book6.date6.year,&book6.date6.month,&book6.date6.day);
printf("请输入书名\n");
scanf("%s", book6.title);
return book6;
}
int main(void) {
struct Book6 b1, b2;
printf("请录入第一本书籍信息!\n");
b1 = getInput(b1);
printf("%d-%d-%d %s\n", b1.date6.year, b1.date6.month, b1.date6.day, b1.title);
printf("请录入第二本书籍信息!\n");
b2 = getInput(b2);
printf("%d-%d-%d %s\n", b2.date6.year, b2.date6.month, b2.date6.day, b2.title);
return 0;
}
传入结构体变量是程序开销变大,尽量使用指针参数
传递结构体指针参数
//
// Created by a1073 on 2019/7/7.
//
#include <stdio.h>
struct Date6{
int year;
int month;
int day;
};
struct Book6{
char title[48];
struct Date6 date6;
};
void getInput(struct Book6 *book6){
printf("请输入时间\n");
scanf("%d-%d-%d",&book6->date6.year,&book6->date6.month,&book6->date6.day);
printf("请输入书名\n");
scanf("%s", book6->title);
}
int main(void) {
struct Book6 b1, b2;
printf("请录入第一本书籍信息!\n");
getInput(&b1);
printf("%d-%d-%d %s\n", b1.date6.year, b1.date6.month, b1.date6.day, b1.title);
printf("请录入第二本书籍信息!\n");
getInput(&b2);
printf("%d-%d-%d %s\n", b2.date6.year, b2.date6.month, b2.date6.day, b2.title);
return 0;
}
与上一个程序进行对比
动态申请结构体
//
// Created by a1073 on 2019/7/7.
//
#include <stdio.h>
#include <stdlib.h>
struct Date6{
int year;
int month;
int day;
};
struct Book6{
char title[48];
struct Date6 date6;
};
void getInput(struct Book6 *book6){
printf("请输入时间\n");
scanf("%d-%d-%d",&book6->date6.year,&book6->date6.month,&book6->date6.day);
printf("请输入书名\n");
scanf("%s", book6->title);
}
int main(void) {
struct Book6 *b1, *b2;
b1 = (struct Book6 *)malloc(sizeof(struct Book6));
b2 = (struct Book6 *)malloc(sizeof(struct Book6));
if (b1 == NULL || b2 == NULL){
exit(1);
}
printf("请录入第一本书籍信息!\n");
getInput(b1);
printf("%d-%d-%d %s\n", b1->date6.year, b1->date6.month, b1->date6.day, b1->title);
printf("请录入第二本书籍信息!\n");
getInput(b2);
printf("%d-%d-%d %s\n", b2->date6.year, b2->date6.month, b2->date6.day, b2->title);
free(b1);
free(b2);
return 0;
}