参考裸编程思想。

#include <stdio.h>
//#include "ycjobject.h"// 颜色定义
#define CL_BLACK                0
#define CL_WHITE                1
#define CL_GRAY                 2// 物种身份ID定义
#define ID_GRASS                0x0001
#define ID_CARROT               0x0002
#define ID_GREENVEGETABLE       0x0004
#define ID_RABBIT               0x0010
#define ID_FISH                 0x0020
#define ID_WOLF                 0x0100// 空指针定义
#define NIL             0// 函数指针类型定义
typedef char (*teat)(unsigned food);
typedef void (*trun)(void);
typedef unsigned (*species)(void);// 兔子类
struct TRabbit
{species id;                // 类的类型标识species food;          // 食物常量species enemy;           // 敌人常量unsigned char color; // 颜色变量float weight;            // 重量变量,以千克为单位unsigned char age;     // 年龄变量,以月为单位teat Eat;               // 吃行为trun Run;             // 跑行为
};// ===== implement =====
// 功能:返回兔子的类型
// 参数:无
// 返回:兔子的类型
// 备注:
unsigned rabbitId(void)
{return ID_RABBIT;
}// 功能:返回兔子的食物
// 参数:无
// 返回:兔子的食物
// 备注:多种食物一次返回
unsigned rabbitFood(void)
{return ID_GRASS|ID_CARROT|ID_GREENVEGETABLE;
}// 功能:返回兔子的敌人
// 参数:无
// 返回:兔子的敌人
// 备注:多种敌人一次返回
unsigned rabbitEnemy(void)
{return ID_WOLF;
}// 功能:兔子吃
// 参数:food,unsigned类型,喂给兔子的食物
// 返回:0:没吃成
//       1:吃成了
// 备注:
char rabbitEat(unsigned food)
{// 都说兔子不吃窝边草// 那么不是窝边的草就可以吃// 它兔窝边的草不是我窝边的草,所以也可以吃// 还有,萝卜和青菜,也可以吃// 兔子不能吃兔子,不能吃鱼,更不能吃狼return (food & 0x0007);
}// 功能:兔子跑
// 参数:无
// 返回:无
// 备注:
void rabbitRun(void)
{// 可以蹦// 可以跳// 可以跑
}// 功能:兔子类创建
// 参数:aRabbit,TRabbit类型,一只兔子
// 返回:无
// 备注:
void rabbitCreate(struct TRabbit *obj)
{// 常量初始化obj->id = rabbitId;obj->food = rabbitFood;obj->enemy = rabbitEnemy;// 变量初始化// 因为变量初始化没有意义,所以不做// 行为(方法)初始化obj->Eat = rabbitEat;obj->Run = rabbitRun;
}int main(void)
{// 申请对象空间-兔子1struct TRabbit Rabbit1;// 申请对象空间-兔子2struct TRabbit Rabbit2;// 创建兔子1对象rabbitCreate(&Rabbit1);Rabbit1.color = CL_WHITE;Rabbit1.weight = 1.03;Rabbit1.age = 3;// 创建兔子2对象rabbitCreate(&Rabbit2);Rabbit2.color = CL_GRAY;Rabbit2.weight = 1.28;Rabbit2.age = 4;// 兔子1吃萝卜Rabbit1.Eat(ID_CARROT);// 兔子2跑Rabbit2.Run();return 0;
}

C语言结构体实例-创建兔子相关推荐

  1. c语言-结构体实例笔记

    结构体实例 实例一览: 使用结构体存储学生的信息 Store information of a student using structure 计算二者距离(以英寸英尺为单位) Add two dis ...

  2. go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别

    入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...

  3. C语言结构体运用实例

    C语言结构体运用实例 问题描述:编写程序,定义一个结构体(如下图)数组存放5个同学的学号,姓名和成绩,程序可按照用户输入的学号在该数组中进行查找,如找到则输出该同学的学号.姓名和成绩信息,如找不到则输 ...

  4. C语言结构体struct详解与实例

    目录 1.定义 2.应用 2.1初始化 2.2使用 3.结构体对齐规则与存储 1.定义 C语言中结构体(struct关键字定义)是一种自定义数据类型.通过结构体的定义可以将多种不同类型数据形成一个组合 ...

  5. C语言结构体的作用、定义、使用方法以及实例

    目前已学的数据类型:数组(1.所有数据的类型必须一致   2.访问数组的成员必须通过下标) 学籍管理系统:学生(姓名.学号.性别.年龄.成绩...) 飞机票订票系统:机票(订票时间.班号.起点.终点. ...

  6. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  7. python展开 c函数中的宏预处理_Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  8. C语言结构体指针(指向结构体的指针)详解

    当一个指针变量指向结构体时,我们就称它为结构体指针.C语言结构体指针的定义形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: //结构体 struct stu{ cha ...

  9. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

最新文章

  1. 2018网站信息系统安全等级保护限期整改通知书的处理解决方案
  2. java面试第十四天
  3. 前去哪儿产品总监白羽:做SaaS产品需要注意哪些坑?
  4. QQ卡机问题解决方法
  5. Pytorch中RNN入门思想及实现
  6. C#连接数据库SQL(2005)
  7. docker create_Docker镜像管理(一)
  8. python全局变量修改_python中全局变量的修改
  9. Macos 12 打不开微信解决方案
  10. Linux基础——Linux 基本指令 nano 和 cat
  11. C++11标准后的C++阅读书目
  12. VS编译错误:winsock.h winsock2.h ws2def.h 重定义
  13. 机顶盒系统升级服务器地址,网络机顶盒怎么升级?详细教程分享
  14. 华三模拟器(防火墙)实现IPSEC穿越NAT实验
  15. hp服务器时间修改,HP服务器bios时间设置确认
  16. Neural Controlled Differential Equations forIrregular Time Series(NIPS2020)
  17. Python快速上手攻略
  18. TT付款方式、前TT和后TT、LC信用证+TT付款方式
  19. 定时刷新 定时刷新 定时刷新 定时刷新
  20. java 串讲_Java知识串讲

热门文章

  1. SEO优化效果不佳?试试做减法
  2. SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源
  3. 12月24日科技资讯|12306 回应软件崩了;微信发布新版本,朋友圈可“斗图”;Ant Design 3.26.4 发布
  4. Hdu 2027 getchar用法
  5. 前端架构演进及主流UI
  6. idea error launching git
  7. QML中用C++多线程读取网页内容
  8. 送给拉勾CSDN的一封信。
  9. Mobileye、地平线、芯擎、寒武纪、芯驰等汽车SoC芯片背后的IP供应商——Arteris
  10. Mob开放日:成功手游基因大揭秘