Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116272
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 242
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-17 13:36
文章分类

全部博文(29)

文章存档

2015年(29)

我的朋友

分类: C/C++

2015-04-16 15:51:16

转载自:http://www.cnblogs.com/Daniel-G/archive/2012/12/02/2798496.html

 柔性数组

* 柔性数组即数组大小待定的数组

 

* C语言中结构体的最后一个元素可以是大小未知的数组

 

* C语言中可以由结构体产生柔性数组


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <malloc.h>

  3. typedef struct _soft_array
  4. {
  5.     int len;
  6.     int array[];
  7. }SoftArray;

  8. int main()
  9. {
  10.     int i = 0;
  11.     SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);
  12.     
  13.     sa->len = 10;
  14.     
  15.     for(i=0; i<sa->len; i++)
  16.     {
  17.         sa->array[i] = i + 1;
  18.     }
  19.     
  20.     for(i=0; i<sa->len; i++)
  21.     {
  22.         printf("%d\n", sa->array[i]);
  23.     }
  24.     
  25.     free(sa);
  26.     
  27.     return 0;
  28. }

柔性数组的结构如何只能堆上生成

柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。

声明


  1. typedef struct zero_array
  2. {
  3.     size_t len;
  4.     void * array[0];
  5. }zero_array_t;

大小

可以用sizeof 看看其大小

  1. printf("%d\n",sizeof(zero_array_t));//CentOS5.6 32 下输出4

zero_array_t 后面跟着一块len的数组,内存布局有兴趣的同学会画一下。




阅读(1555) | 评论(0) | 转发(0) |
0

上一篇:第六节 I2C软件实现

下一篇:C++之命名空间

给主人留下些什么吧!~~