S1E44:传递结构体变量和结构体指针--笔记
#include <stdio.h>#include <stdlib.h>
//鱼C论坛——BaysideLizard写于2023年11月28日
struct Test
{
int x;
int y;
}t1,t2;
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title;
char author;
float price;
struct Date date;
char publisher;
};
struct Book inputBook(struct Book book);
void printBook(struct Book book);
void inputBook_pointer(struct Book *book);
void printBook_pointer(struct Book *book);
int main()
{
t1.x = 1;
t1.y = 2;
t2 = t1;
printf("t2.x = %d,t2.y = %d\n\n",t2.x,t2.y);
//说明两个结构体变量之间可以直接使用赋值号
//前提是里边的类型一样。
struct Book b1,*b2;
//用malloc函数为结构体分配存储空间
b2 = (struct Book*)malloc(sizeof(struct Book));
if(b2 == NULL)
{
printf("内存分配失败!");
exit(1);
}
//传递结构体变量:
printf("请输入第一本书的信息:\n");
b1 = inputBook(b1);
putchar('\n');
//传递结构体指针:
printf("请输入第二本书的信息:\n");
inputBook_pointer(b2);
printf("\n===数据录入完毕===\n\n");
//传递结构体变量实验:
printf("打印第一本书的信息:\n");
printBook(b1);
putchar('\n');
printf("打印第二本书的信息:\n");
printBook_pointer(b2);
free(b2);
return 0;
}
struct Book inputBook(struct Book book)
{
printf("请输入书名:");
scanf("%s",book.title);
printf("请输入作者:");
scanf("%s",book.author);
printf("请输入售价:");
scanf("%f",&book.price);
printf("请输入出版日期:");
scanf("%d-%d-%d",&book.date.year,&book.date.month,&book.date.day);
printf("请输入出版社:");
scanf("%s",book.publisher);
return book;
}
void printBook(struct Book book)
{
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.publisher);
}
void inputBook_pointer(struct Book *book)
{
printf("请输入书名:");
scanf("%s",book->title);
printf("请输入作者:");
scanf("%s",book->author);
printf("请输入售价:");
scanf("%f",&book->price);
printf("请输入出版日期:");
scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
printf("请输入出版社:");
scanf("%s",book->publisher);
}
void printBook_pointer(struct Book *book)
{
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->publisher);
}
运行结果:
t2.x = 1,t2.y = 2
请输入第一本书的信息:
请输入书名:《带你学C带你飞》
请输入作者:小甲鱼
请输入售价:49.90
请输入出版日期:2017-11-11
请输入出版社:清华大学出版社
请输入第二本书的信息:
请输入书名:《零基础入门学习Python》
请输入作者:小甲鱼
请输入售价:49.50
请输入出版日期:2016-11-11
请输入出版社:清华大学出版社
===数据录入完毕===
打印第一本书的信息:
书名:《带你学C带你飞》
作者:小甲鱼
售价:49.90
出版日期:2017-11-11
出版社:清华大学出版社
打印第二本书的信息:
书名:《零基础入门学习Python》
作者:小甲鱼
售价:49.50
出版日期:2016-11-11
出版社:清华大学出版社
Process returned 0 (0x0) execution time : 36.130 s
Press any key to continue.
在FishC学C的第23天 这段代码展示了如何传递结构体变量和结构体指针。下面是对代码的解释:
1. 首先定义了两个结构体类型Test和Date,以及Book类型。
2. 在main函数中定义了两个Test类型的结构体变量t1和t2,并通过t2 = t1将t1的值赋给t2。
3. 接着定义了一个Book类型的结构体变量b1和一个指向Book类型的结构体指针b2,并使用malloc函数为b2分配了内存空间。如果分配失败,则会输出提示信息并退出程序。
4. 然后调用inputBook函数来输入第一本书的信息,该函数接收一个Book类型的结构体变量作为参数,返回输入后的结构体变量。
5. 调用inputBook_pointer函数来输入第二本书的信息,该函数接收一个Book类型的结构体指针作为参数,并直接修改指向的结构体变量的值。
6. 输出提示信息,表示数据录入完毕。
7. 最后调用printBook函数和printBook_pointer函数分别打印第一本书和第二本书的信息。两个函数都接收一个Book类型的结构体变量或结构体指针作为参数,输出对应的信息。
8. 释放b2指向的内存空间。
9. 返回0,表示程序正常结束。
在运行过程中,你需要按照提示依次输入相关信息,然后程序会输出相应的结果。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]