背景知识
我们使用指针在日常编写小程序时一个一个定义变量时不会发现什么问题,但是在实际场景中,比如在游戏中,我们要定义100个怪物,每一个怪物有7、8个属性,那么如果要一个个定义的话,就要定义700-800个变量,这样工作量就很大。
于是我们就想到了另外一种办法,叫做结构体struct的东西就出现了,结构体struct是将一个个小的属性整合到一个大的属性中,则使结构更加清晰、更加简单明了。
代码定义
我们定义一个叫做cxk的怪物,有着HP,MP,name的属性,通过 status 名称创建结构变量。直接通过cxk.属性就可以修改属性的值。
struct status
{
int HP;
int MP;
char name;
}
status cxk
cxk.HP=100;
cxk.MP=100;
内存结构
变量名 | 首地址 |
---|---|
HP | 0XA0 |
MP | 0XA4 |
name | 0XA8 |
代码演示
#include<stdio.h>
struct extra
{
int nothing;
};
struct skill//定义怪物的技能
{
char a;
float b;
int num;
extra wtf;//继续套娃
};
struct monster//存储怪物的基本属性
{
int atk;
long def;
double hp;
skill skl;//开始套娃
};
int main()
{
monster cxk;
cxk.hp = 1919810;
cxk.atk = 2333;
cxk.def = 213;
cxk.skl.a = 'a';
cxk.skl.wtf.nothing = 0;
cxk.skl.num = 1212;
cxk.skl.b = 12121212;
printf("cxk.atk = %x , int \n", &cxk.atk);
printf("cxk.def = %x , long \n", &cxk.def);
printf("cxk.hp = %x , double \n", &cxk.hp);
printf("cxk.skl.a = %x , char \n", &cxk.skl.a);
printf("cxk.skl.b = %x , float \n", &cxk.skl.b);
printf("cxk.skl.num = %x , int \n", &cxk.skl.num);
getchar();
return 0;
}