zoukankan      html  css  js  c++  java
  • 柔性数组

    柔性数组

    * 柔性数组即数组大小待定的数组.
    * 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
    ", 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:
    ");
        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
    ",sum(sa->arr,sa->arr+arrNum));
        return 0;
    }
  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4131029.html
Copyright © 2011-2022 走看看