• 柔性数组


    柔性数组

    * 柔性数组即数组大小待定的数组.
    * 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;
    }
  • 相关阅读:
    IOS归档操作
    IOS文件操作
    NSNumber,NSValue,NSData
    dbcp数据库连接池属性介绍
    Spring整合hibernate4:事务管理
    Spring整合hibernate4
    Spring AOP
    Chapter 27 Controlling Animations
    Chapter 23 Core Data
    Chapter 21 WebServices and UIWebView
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4131029.html
Copyright © 2020-2023  润新知