C语言结构体实例-创建兔子
时间:2022-07-24
本文章向大家介绍C语言结构体实例-创建兔子,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考裸编程思想。
#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)
{
// 申请对象空间-兔子1
struct TRabbit Rabbit1;
// 申请对象空间-兔子2
struct 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;
}
- Core-periphery decomposition--核心-外围模型R代码整理
- 停止数据库没有响应的问题分析(r9笔记第51天)
- Hive——巧用transform处理复杂的字符串问题
- 停止数据库没有响应的问题分析(r9笔记第50天)
- 一个SQL语句引发的ORA-00600错误排查(一) (r9笔记第64天)
- 一个SQL语句引发的ORA-00600错误排查(二)(r9笔记第65天)
- 关于all_procedures的问题分析 (r9笔记第61天)
- 半自动化搭建Data Guard的想法和实践(一) (r9笔记第74天)
- Go语言位操作实例
- 通过Snapshot Standby来精确评估SQL性能 (r9笔记第73天)
- mongodb11天之屠龙宝刀(三)基本操作:增删改查与mysql对比
- Go语言 实现bitmap
- 最近的几个技术问题总结和答疑(八) (r9笔记第72天)
- Java基础-day05-代码题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
- 基于SCF实现批量备份Elasticsearch索引到COS
- Prometheus Operator 常用指标
- Prometheus 常用 PromQL 语句
- 小游戏互动能力升级,获取未注册好友名单,定向分享
- 这年头还不会SpringBoot?
- PB级大规模Elasticsearch集群运维与调优实践
- 长假慢学,用TensorFlow做了个AI游戏
- 微服务平台之API授权
- 一些让人恶心的代码片段
- 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
- 还在用Swagger(丝袜哥)生成接口文档?我推荐你试试它...
- 技术分享 | 企业版监控工具 MEM 初探
- Java自动化测试(TestNg 10)
- LeetCode109:有序列表转二叉搜索树