IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言复习:(七)结构体规则 -> 正文阅读

[数据结构与算法]C语言复习:(七)结构体规则

问题:

1.typedef的意义?struct后紧跟着的名称的意义?struct括号末尾后名称的意义?

2.如何在结构体内调用自己?

3.如何在别的结构体中调用已经定义了的结构体?在结构体中定义结构体数组,申请内存应当如何申请内存?

4.在别的文件中定义的结构体是否能被另外文件中的结构体调用?

问题解决:

1.typedef的调用方式为:

typedef Name1 Name2;

Name1 与 Name2 具有相同的意义;

Name1* object = (Name1*)(malloc(sizeof(Name1)));
Name2* object = (Name2*)(malloc(sizeof(Name2)));

上述两者意义相同;

所以:

typedef struct Name1
{
    int A;
    long Timer;
}Name2;
Name1* object = (Name1*)(malloc(sizeof(Name1)));
Name2* object = (Name2*)(malloc(sizeof(Name2)));

?上述是将struct Name1 替换为了Name2;

所以下面赋值依然合法;

所以:struct后紧跟着的名称的意义与struct括号末尾后名称的意义相同。

2.malloc函数是返回(void*)类型的内存给指针。只能分配内存给指针而不能给常量。

所以如果想要自己调用自己,就只能定义自己的指针。(比如链表)

struct Name1
{
	int Data;
	static int A;
	Name1* object;    //    自己调用自己
};

?3.malloc只能分配内存给隶属于此结构体的结构。

typedef struct Role_Struct
{
    int Map_x,Map_y;
    struct
    {
        int x,y;
        int w,h;
    }CollisionBody;
}Role_Struct;

上述的结构体的结构全是隶属于此结构体结构,malloc能直接分配内存给对象。

typedef struct MonsterAttackRole_Struct
{
    int SkillNum;
    int SkillHurm;
}MonsterAttackRole_Struct;


typedef struct Role_Struct
{
    int Map_x,Map_y;

    MonsterAttackRole_Struct* RoleAttackedByMonster[100];    
}Role_Struct;

?上述中,在另一个类中出现另一个结构体变量,另一个结构体变量不属于此结构体,malloc函数无法为其对象分配内存,需要单独进行分配。

Role_Struct* Role_object = (Role_Struct*)(malloc(sizeof(Role_Struct)));
//首先为第一个对象分配内存

for(int Num = 0;Num <= 100 - 1; Num++)
{
    Role_object->RoleAttackedByMonster[Num] = (MonsterAttackRole_Struct*)
        malloc(sizeof(MonsterAttackRole_Struct));
}
//为人物对象中的每一个其他类对象分配内存

?应该采用上述操作进行内存分配。

4.在别的文件中定义的结构体只能被另外的.cpp文件中的结构体调用,而不能被其他的.h文件调用。

struct Exp_Struct
{
	int A;
	long B;
};

//-------------------Exp1.h---------------------


typedef struct Exp2_Struct
{
	int A;
	long B;
	Exp_Struct* Exp2_object;
}Exp2_Struct;

//-------------------Exp2.h---------------------

上述写法为错误写法:

原因:编译器总是先编译.h文件再去编译.cpp文件

在一起编译.h文件的时候Exp2.h中会发生Exp_Struct未定义的情况

struct Exp_Struct
{
	int A;
	long B;
};

//-------------------Exp1.h---------------------


typedef struct Exp2_Struct
{
	int A;
	long B;
	Exp_Struct* Exp2_object;
}Exp2_Struct;

//-------------------Exp2.cpp---------------------

上述写法正确:

因为.h文件全部编译完成之后,再去编译.cpp文件就不会出错

综上:结构体能跨文件在别的.cpp中定义调用。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:57:43  更:2021-11-11 12:58:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:21:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码