类似类的形式

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

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

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

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

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

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 分配空间,根据具体数组大小来分配

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

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在主函数中无法调用。。

【408】C函数中的ADT的更多相关文章

  1. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  2. 为什么不能在init和dealloc函数中使用accessor方法

    前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...

  3. js函数中this的不同含义

    1.js函数调用过程中,js线程会进入新的执行环境并创建该环境的变量对象,并添加两个变量:this和arguments,因此可以在函数中使用这两个变量.需要注意的是,this变量不能重新赋值,而arg ...

  4. c++中函数中变量内存分配以及返回指针、引用类型的思考

    众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函 ...

  5. C++程序设计(关于函数中数组传递的一点心得)

    题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分:   ...

  6. eclipse中安装adt插件

    对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序.但是在eclipse中并不能直接开发android程序,需要我们 ...

  7. Javascript函数中的高级运用

    先介绍一下js中的高阶函数,所谓的高阶函数就是,一个函数中的参数是一个函数或者返回的是一个函数,就称为高阶函数. js中已经提高了一下高阶函数,使用起来非常棒,当然我们也可以自己实现,我介绍几种ES5 ...

  8. 回调函数中使用MFC类的成员或对话框控件的简单方法

    在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...

  9. 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中

    问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:  问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...

随机推荐

  1. vue 下拉框单选、多选以及默认值

    背景: 单选框和多选框 都是使用了 el-select,但传给后端的值类型不一样,多选框传的值是 list类型: ['value1','value2'] ,单选框传值和其他类型一样:设置默认值也是如此 ...

  2. 云计算(5)---MapReduce

    什么是MapReduce 例如用MapReduce如何计算12+22+32+42 用MapReduce执行Wordcount 步骤1:Map map task1 和map task2是独立,并行进行 ...

  3. super关键字小结(构造方法的执行是不是一定会创建对象?)

    1.父类 public class Person { private String name = "李四"; private int age; public Person() { ...

  4. javaWeb下载

    ---恢复内容开始--- 下载 1. 下载就是向客户端响应字节数据!  原来我们响应的都是html的字符数据!  把一个文件变成字节数组,使用response.getOutputStream()来各应 ...

  5. div 水平垂直居中

    css <style> .main{ background: #999999; width: 600px; height: 400px; position: absolute; top: ...

  6. oracle存储过程把查询到的值更新到别的表

    create or replace procedure update_nst_t_Clime2 as cursor c_db is select * from NST_T_FRAME f ,) as ...

  7. Queue Pair in RDMA (zz)

    Queue Pair in RDMA 首页分类标签留言关于订阅2018-03-21 | 分类 Network  | 标签 RDMA 一个CA(Channel Adapter)可以包含多个QP,QP相当 ...

  8. EasyUEFI---EFI/UEFI boot option management

    EasyUEFI owns comprehensive EFI/UEFI boot option management functions, such as create, delete, edit, ...

  9. dashucoding记录2019.6.6

    div { display:flex; flex-direction:row-reverse; } -webkit-, - ms-或-moz- CSS语法 flex-direction: row|ro ...

  10. docker安装mysql5.7 数据挂载

    docker安装mysql5.7,并数据卷挂载到主机 # docker 中下载 mysql docker pull mysql:5.7 #启动 docker run --name mysql3306 ...