结构体练习题二

练习题一

1、定义一个结构体Monster,能够存储怪的各种信息(至少有一个成员是结构体类型)。
2、声明一个Monster类型的数组,长度为10.
3、编写一个函数,为第二题中的数组赋值.
4、编写一个函数,能够通过怪物ID,打印当前这个怪物的所有信息.

// hele.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"


//定义一个坐标结构体
struct coordinate
{
	float x;
	float y;
	float h;
};


//定义一个游戏怪物结构体,使用上面的坐标结构体
struct Monster
{	
	int id;
	int Life_value;
	int Magic_value;
	int Grade;
	int Aggressivity;
	coordinate position;

};


//声明一个Monster的结构体数组tianlong长度为10
Monster tianlong[10]; //声明一个结构体变量时要放在定义结构体的后面调用了这个结构体的函数前面。


//通过循环给结构体全部赋值
void Function()			
{			
	int i;
	for(i=0; i<10; i++)
	{
		tianlong[i].id = i+1;
		tianlong[i].Life_value = 100+i;
		tianlong[i].Magic_value = 200+i;
		tianlong[i].Grade = 10+i;
		tianlong[i].Aggressivity = 300+i;
		tianlong[i].position.x = 20.0;
		tianlong[i].position.y = 30.0;
		tianlong[i].position.h = 40.0;
	}

}


//通过循环判断结构体的里的ID是否等于我们要寻找的如果是就输出ID为X的怪物信息
void Fubction1(int x)
{	
	int i = 0;
	while(i<10)
	{
		if(x == tianlong[i].id)
		{
			printf("当前怪物ID%d生命%d魔法%d等级%d攻击力%d坐标x:%fy:%fh:%f",tianlong[i].id,tianlong[i].Life_value,tianlong[i].Magic_value,
				tianlong[i].Grade,tianlong[i].Aggressivity,tianlong[i].position.x,tianlong[i].position.y,tianlong[i].position.h);
			break;
		}
		i++;
	}
}


int main(int argc, char* argv[])
{
	
	Function();
	Fubction1(5);
	return 0;
}

声明一个结构体变量时要放在定义结构体的后面调用了这个结构体的函数前面。

练习二分析下面结构体的内存分配

struct S1
{
char c; 8
double i; 8
};
默认对其参数8的情况下是16

struct S2
{
char c1; 8
S1 s; 16
char c2; 8
char c3;
};
默认对其参数8的情况下是32

struct S3
{
int c1; 4
char c2[10]; 10+2=12
};
默认对其参数8的情况下是16
在进行参数对其时以参数小的为值
最后在以最大的参数对小于其参数值的进行补齐
所以按照数据类型由小到大的顺序进行书写可以节省空间。
可以通过#pragma pack(n)修改默认的对其参数只能时1,4,8

递归函数反汇编分析

在汇编中递归就是一直执行某段代码段和循环很像,和循环不同的是递归会对堆栈进行操作而循环不会。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值