alex_bn_lee

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【408】C函数中的ADT

类似类的形式

  • boardADT.h:所有的宏、声明等部分写在这里
  • boardADT.c:只需要 #inclue "boardADT.h",不需要 include 其他系统头文件,然后在此建立 struct,类似属性的内容,建立各种函数,类似方法的内容
  • puzzle.c:只需要 #inclue "boardADT.h",main 函数在此,主要调用 ADT 中的属性和方法

 

在 struct 里面添加数组指针,所以只是存储地址

注意:struct 在ADT里面建立,不在 head 文件里面

另外,主函数 所在的文件不能调用 struct 里面的内容

即在主函数中不能出现 -> 的字样。。

1
2
3
4
5
6
7
8
struct board_struct {
    long* body;
    long length;
    long side;   //length of side
    long size;
};
 
typedef struct board_struct *board;

在初始化的时候,首先为 bo 分配空间,包括 地址+long+long+long

然后再为 数组 bo->body 分配空间,根据具体数组大小来分配

他们的空间是分开的,因此最后需要分别释放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
board init_board(long size_arg) {
    board bo;
    bo = malloc(sizeof(struct board_struct));
    if (bo == NULL){
        fprintf(stderr, "Memory allocation error.\n");
        exit(EXIT_FAILURE);
    }
    bo->body = malloc(sizeof(long)*size_arg);
    if (bo->body == NULL){
        fprintf(stderr, "Memory allocation error.\n");
        exit(EXIT_FAILURE);
    }
    bo->length = 0;
    bo->side = 0;
    bo->size = size_arg;
    return bo;
}

最后为board->body释放空间的时候,需要建立函数释放,因为board->body在主函数中无法调用。。

posted on   McDelfino  阅读(309)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2018-06-22 【325】python**:selenium
2018-06-22 【324】Python 库说明(安装&卸载)
点击右上角即可分享
微信分享提示