参考裸编程思想。

#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;
}

C语言结构体实例-创建兔子的更多相关文章

  1. 失落的C语言结构体封装艺术

    Eric S. Raymond <esr@thyrsus.com> 目录 1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 ...

  2. (转)失落的C语言结构体封装艺术

    目录1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 7.难以处理的标量的情况 8.可读性和缓存局部性 9.其他封装的技术 10.工具 ...

  3. Linux C语言结构体-学习笔记

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

  4. GO语言学习(十六)Go 语言结构体

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

  5. 06. Go 语言结构体

    Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...

  6. Go 语言 结构体

    Go 语言 结构体 引言Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型结构体是由一系列具有相同类型或不同类型的数据构成的数据集合结构体表示一项记录,比如保存图书 ...

  7. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  8. c语言结构体3之结构体嵌套

    注意: 1结构体内部再次定义一个结构体 但是没有创建结构体的实例  也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量 struct tianchao { int data; ]; stru ...

  9. Go语言结构体(struct)

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

随机推荐

  1. 10.VScode Debug——2019年12月12日

    title: vscode debug date: "2019-09-17 16:17:16" tags: 技巧 categories: 技术驿站 1.为什么需要调试 写了很多行代 ...

  2. shell编程程序实例

    1.计算器 #!/bin/bash #test #by authors hdc 2018 function add(){ #实现加法 c=$[ $a + $b ] #相加 echo $c } func ...

  3. Cytoscape基础教程笔记

    昨天开始学用Cytoscape,其tutorial分为两个部分,基础的和高级 的.基础教程又分成了四课:Getting Started.Filters & Editor.Fetching Ex ...

  4. ConcurrentHashMap1.7源码分析

    参考:https://www.cnblogs.com/liuyun1995/p/8631264.html HashMap不是线程安全的,其所有的方法都未同步,虽然可以使用Collections的syn ...

  5. bootstrap 点击模态框上的提交按钮后,模态框不能关闭的解决办法

    项目问题如下图, 点击确定后,模态框没反应,按理,点击删除按钮时,弹出确认删除的模态框,点击确定后,使用ajax请求服务器,把数据库中对应的数据进行删除,根据服务器 servlet返回的状态值(del ...

  6. Android逆向之旅---SO(ELF)文件格式详解

    第一.前言 从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域.作为一名Android开发者,每个人都想去探索这个领域,因为一旦 ...

  7. Pangu and Stones HihoCoder - 1636 区间DP

    Pangu and Stones HihoCoder - 1636 题意 给你\(n\)堆石子,每次只能合成\(x\)堆石子\((x\in[L, R])\),问把所有石子合成一堆的最小花费. 思路 和 ...

  8. paper 159:文章解读:From Facial Parts Responses to Face Detection: A Deep Learning Approach--2015ICCV

    文章链接:https://arxiv.org/pdf/1509.06451.pdf 1.关于人脸检测的一些小小总结(Face Detection by Literature) (1)Multi-vie ...

  9. LOJ 2980 「THUSCH 2017」大魔法师——线段树

    题目:https://loj.ac/problem/2980 线段树维护矩阵. 然后是 30 分.似乎是被卡常了?…… #include<cstdio> #include<cstri ...

  10. 用threading 解决 gunicorn worker timeout

    产生worker timeout 的背景 while 1: ..... time.sleep(1) gunicorn运行起来,只等待了30s,就卡住了,没报任何异常或err,查了gunicorn 官方 ...