[关闭]
@mwumli 2015-05-18T10:09:03.000000Z 字数 1197 阅读 1587

SPLOS语言 -- 结构体 struct

SPLOS OSEP


有的时候,我们希望把一组数据聚合起来,表示它们有着某种关系,应该作为一个整体处理

而基本类型根本做不到这一点,数组也只能做到把同类型的一组数据聚集

这时,结构体的出现就解决了这个问题

结构体在 SPLOS 语言中用关键字 struct 来定义

结构体是先定义后使用,定义之后,它就是一个可以像基本类型intchar一样被使用的数据类型
我们可以用定义好的结构定义结构体变量来存储数据

定义结构体 和 结构体变量

  1. struct square {
  2. int length;
  3. int width;
  4. };
  5. struct square it={20, 40};

说明:
1. 定义结构体也是一个语句,因此末尾需要添加 ;
2. 结构体定义中的每一项被称作结构体成员,都是用其他数据类型定义的变量
3. 每一个结构体成员末尾都有一个 ;
4. 这里定义的结构体可用来表示一个矩形,矩形的长和宽被存储其中
5. it 是我们使用新定义的结构体来定义的结构体变量,并且初始后结构提成员为20, 40

操作结构体成员

  1. struct square {
  2. int length;
  3. int width;
  4. };
  5. struct square it={20, 40};
  6. it.width = 80;
  7. it.length = 67;

说明:
1. 我们使用成员运算符 . 来取得结构体变量的每一个成员,从而对其的值进行加,减,改变 ‘
2. 成员运算符 . 的前后不能有空隙
3. 操作的一般表达式:结构体变量.结构提成员

程序

  1. #import {
  2. splos_io.p; //导入标准输入输出模块
  3. }
  4. struct square {
  5. int length;
  6. int width;
  7. };
  8. int getSquare(struct square a)
  9. {
  10. int area;
  11. area = a.width * a,square;
  12. return area;
  13. }
  14. void print(int area1, int area2)
  15. {
  16. sp_printf_string("宽度改变前的面积:");
  17. sp_printf_num(area1);
  18. sp_printf_char('\n');
  19. sp_printf_string("宽度改变后的面积:");
  20. sp_printf_num(area2);
  21. sp_printf_char('\n');
  22. }
  23. int main()
  24. {
  25. int area1, area2;
  26. struct square sq = {20, 40};
  27. area1 = getSquare(sq);
  28. sq.width = 34; //改变结构体成员`width`的值
  29. area2 = getSquare(sq);
  30. print(area1, area2);
  31. return 0;
  32. }

说明:
1. 定义了结构体struct square,用来定义结构提变量,来存储矩形的长和宽
2. 定义了计算矩形面积的函数getSquare,把结构体变量作为参数传递计算矩形的所有数据
3. 最后定义了输出函数,输出改变宽度前和宽度后面积的变化
4. 利用标准输入输出模块splos_io.p

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注