首页 > 代码库 > 柔性数组
柔性数组
柔性数组
* 柔性数组即数组大小待定的数组.
* C语言中结构体的最后一个元素可以是大小未知的数组
* 由于c 语言中第一数组是,必须声明数组的大小,所以数组大小是固定的,当程序需要变长数组是不被允许的,所以巧妙地使用结构体,构造弹性数组,可以转化为可变长的数组,
* C语言中可以由结构体产生柔性数组
1 #include <stdio.h> 2 #include <malloc.h> 3 4 typedef struct _soft_array 5 { 6 int len; 7 int array[]; 8 }SoftArray; 9 10 int main()11 { 12 int i = 0;13 SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);14 15 sa->len = 10;16 17 for(i=0; i<sa->len; i++)18 {19 sa->array[i] = i + 1;20 }21 22 for(i=0; i<sa->len; i++)23 {24 printf("%d\n", sa->array[i]); 25 }26 27 free(sa);28 29 return 0;30 }
柔性数组的结构如何只能堆上生成
柔性数组即int array[],是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。
sizeof(SoftArray)=4,可以看出,结构体成员array是不占结构体的内存空间的.他会默认在堆区声明结构体的后边,当为其赋值是他就会扩展.
写一个简单程序,应用一下,计算任意系列int 型数据的和.代码如下:
#include <stdio.h>#include <malloc.h>int sum(int *start,int *end){ int total=0; while(start<end) { total+=*start++; } return total;}typedef struct st_arr{ int len; int arr[];}SoftArray;int main(){ int arrNum; int i; printf("please input the number of Array:\n"); scanf("%d",&arrNum); SoftArray *sa=malloc(sizeof(SoftArray)+sizeof(int)*arrNum); sa->len=arrNum; for(i=0;i<arrNum;i++) { scanf("%d",&sa->arr[i]); } printf("sum:%d\n",sum(sa->arr,sa->arr+arrNum)); return 0;}
柔性数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。