鱼C论坛

 找回密码
 立即注册
查看: 1116|回复: 1

[作品展示] S1E44:传递结构体变量和结构体指针--笔记

[复制链接]
发表于 2023-11-28 21:24:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //鱼C论坛——BaysideLizard写于2023年11月28日

  4. struct Test
  5. {
  6.     int x;
  7.     int y;
  8. }t1,t2;

  9. struct Date
  10. {
  11.     int year;
  12.     int month;
  13.     int day;
  14. };

  15. struct Book
  16. {
  17.     char title[128];
  18.     char author[40];
  19.     float price;
  20.     struct Date date;
  21.     char publisher[40];
  22. };

  23. struct Book inputBook(struct Book book);
  24. void printBook(struct Book book);
  25. void inputBook_pointer(struct Book *book);
  26. void printBook_pointer(struct Book *book);

  27. int main()
  28. {
  29.     t1.x = 1;
  30.     t1.y = 2;
  31.     t2 = t1;
  32.     printf("t2.x = %d,t2.y = %d\n\n",t2.x,t2.y);
  33. //说明两个结构体变量之间可以直接使用赋值号
  34. //前提是里边的类型一样。

  35.     struct Book b1,*b2;

  36. //用malloc函数为结构体分配存储空间
  37.     b2 = (struct Book*)malloc(sizeof(struct Book));
  38.     if(b2 == NULL)
  39.     {
  40.         printf("内存分配失败!");
  41.         exit(1);
  42.     }

  43. //传递结构体变量:
  44.     printf("请输入第一本书的信息:\n");
  45.     b1 = inputBook(b1);
  46.     putchar('\n');

  47. //传递结构体指针:
  48.     printf("请输入第二本书的信息:\n");
  49.     inputBook_pointer(b2);

  50.     printf("\n===数据录入完毕===\n\n");

  51. //传递结构体变量实验:
  52.     printf("打印第一本书的信息:\n");
  53.     printBook(b1);
  54.     putchar('\n');
  55.     printf("打印第二本书的信息:\n");
  56.     printBook_pointer(b2);

  57.     free(b2);

  58.     return 0;
  59. }

  60. struct Book inputBook(struct Book book)
  61. {
  62.     printf("请输入书名:");
  63.     scanf("%s",book.title);
  64.     printf("请输入作者:");
  65.     scanf("%s",book.author);
  66.     printf("请输入售价:");
  67.     scanf("%f",&book.price);
  68.     printf("请输入出版日期:");
  69.     scanf("%d-%d-%d",&book.date.year,&book.date.month,&book.date.day);
  70.     printf("请输入出版社:");
  71.     scanf("%s",book.publisher);

  72.     return book;
  73. }

  74. void printBook(struct Book book)
  75. {
  76.         printf("书名:%s\n",book.title);
  77.         printf("作者:%s\n",book.author);
  78.         printf("售价:%.2f\n",book.price);
  79.         printf("出版日期:%d-%d-%d\n",book.date.year,book.date.month,book.date.day);
  80.         printf("出版社:%s\n",book.publisher);
  81. }

  82. void inputBook_pointer(struct Book *book)
  83. {
  84.     printf("请输入书名:");
  85.     scanf("%s",book->title);
  86.     printf("请输入作者:");
  87.     scanf("%s",book->author);
  88.     printf("请输入售价:");
  89.     scanf("%f",&book->price);
  90.     printf("请输入出版日期:");
  91.     scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
  92.     printf("请输入出版社:");
  93.     scanf("%s",book->publisher);
  94. }

  95. void printBook_pointer(struct Book *book)
  96. {
  97.     printf("书名:%s\n",book->title);
  98.     printf("作者:%s\n",book->author);
  99.     printf("售价:%.2f\n",book->price);
  100.     printf("出版日期:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);
  101.     printf("出版社:%s\n",book->publisher);
  102. }
复制代码









运行结果:
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天
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-28 21:24:49 | 显示全部楼层
这段代码展示了如何传递结构体变量和结构体指针。下面是对代码的解释:

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官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表