柔性数组的介绍和简单使用说明,柔性数组的介绍和简单使用教案

  柔性数组的介绍和简单使用说明,柔性数组的介绍和简单使用教案

  也许你从来没有听说过灵活阵列的概念,但它确实存在。在C99中,结构中的最后一个成员允许是一个大小未知的数组,称为灵活数组成员。

  1.什么是灵活阵列?

  结构中的最后一个成员允许是大小未知的数组,称为灵活数组成员。

  结构S

  int n;

  int arr[];//未知大小的灵活数组成员,数组的大小可以调整

  int main()

  结构S;

  printf(%d\n ,sizeof(s));//计算二级结构输出4的大小不计算arr数组的大小

  返回0;

  }

  我们创建的灵活阵列的一般用途:

  结构S

  int n;

  int arr[];

  int main()

  //创建一个结构指针ps,动态分配4个20字节的内存给它。

  struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));

  返回0;

  //可以使用灵活的数组arr

  免费(PS);

  ps=NULL

  返回0;

  }

  2.灵活阵列的优势是什么?

  我们先来看下面两个代码。

  1代码使用灵活的数组实现功能

  结构S

  int n;

  int arr[];

  int main()

  //创建一个结构指针ps,动态分配4个20字节的内存给它。

  struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));

  PS-n=100;

  int i=0

  for(I=0;我我)

  PS-arr[I]=I;//为数组arr赋值0 1 2 3 4

  免费(PS);

  ps=NULL

  返回0;

  2代码使用常用的嵌套指针实现函数。

  结构S

  int n;

  int * arr

  int main()

  struct S * PS=(struct S *)malloc(sizeof(struct S));

  PS-arr=malloc(5 * sizeof(int));

  int i=0

  for(I=0;我我)

  PS-arr[I]=I;//为数组arr赋值0 1 2 3 4

  //释放两个打开的内存

  免费(PS-arr);

  PS-arr=NULL;

  免费(PS);

  ps=NULL

  返回0;

  代码1和代码2都可以实现arr数组大小的灵活调整。但是代码1有两个好处:

  方便的内存释放

  如果我们的代码在一个给别人的函数里,你在里面做了二次内存分配,把整个结构返回给用户,用户可以通过调用free来释放这个结构,但是用户不知道这个结构里的成员也需要free,所以你不能指望用户发现这件事。所以我们一次性分配结构的内存和成员需要的内存,返回一个指向结构的指针给用户。用户可以通过释放一次来释放所有内存。

  提高访问速度

  连续内存可以提高访问速度,减少内存碎片。

  结构中的灵活数组成员必须在另一个成员之前。

  Zeof返回的这个结构大小不包括灵活数组的内容。

  包含灵活数组的成员结构使用malloc()函数动态分配内存,分配的内存要大于结构的大小,以适应灵活数组的预期大小。

  例如:

  结构S

  int n;//必须存在于灵活数组成员之前的成员

  int arr[];

  int main()

  //这个结构的内存大小是4

  结构S;

  printf(%d\n ,sizeof(s));//计算二级结构输出4的大小不计算arr数组的大小

  //动态分配4 20字节的内存给它24 4

  struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));

  返回0;

  }

  这就是我今天要讲的内容。本文只简单介绍一下灵活数组,是我的笔记和上课的一些体会。

  希望对大家有帮助!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: