代码之家  ›  专栏  ›  技术社区  ›  rlb.usa

什么是灵活的阵列?

  •  3
  • rlb.usa  · 技术社区  · 16 年前

    什么是灵活的阵列? 我找不到太多。

    5 回复  |  直到 12 年前
        1
  •  2
  •   Joe Suarez    16 年前

    灵活数组是一个数组,其索引边界在运行时确定,并可能在数组的生命周期中发生更改。

    Java阵列是灵活的。例如,在Java中,可以将一个数组分配给另一个数组:

    int[] a1 = {1, 2, 3, 4};
    int[] a2 = {1, 2, 3};
    a1 = a2;
    

    首先,a1的指数范围为0_“3,a2的指数范围为0_“2。

    在分配a1=a2之后,a1指向索引范围为0_“2”的数组,因此a1的索引范围在a1的生命周期内发生变化。

        2
  •  8
  •   Jerry Coffin    16 年前

    它可以参考一些东西。我唯一见过的地方 精确的 不过,常用的措辞是c99。

    灵活的数组成员是官方的c99名称,过去(通常)称之为“struct hack”。基本思想是定义这样的结构:

    struct x {
        int a; // whatever members you want here.
        size_t size;
        int x[]; // no size, last member only
    };
    

    这主要(或专门)用于动态分配。当您要分配这种类型的对象时,可以为所需的数组大小分配足够的额外空间:

    struct x *a = malloc(sizeof(struct x) + 20 * sizeof(int));
    a->size = 20;
    

    这个 size 成员并不是严格必需的,但通常便于跟踪为项目分配的大小。上面的一个有20个整数的空间,但是主要的一点是你可能有几个整数,每个都有自己的大小。

        3
  •  3
  •   danben    16 年前

    没有灵活的数组,但有灵活的数组成员。它用于作为结构的成员提供对可变长度数据的访问。

    http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/strct.htm :

    一个灵活的数组成员,它是 C99功能,可以是 具有多个名称的结构 成员。灵活的数组成员可以是 用于访问可变长度 对象。灵活数组成员必须 是这样一个 结构,类型不完整。

        4
  •  1
  •   alanc    13 年前

    这是否描述了你的要求?这不是Sun C编译器独有的功能,但它是我发现的第一个清晰的概述:

    Sun Studio 12 Update 1: C User's Guide: Flexible Array Members

        5
  •  0
  •   rcreddy    12 年前

    灵活的数组成员是网络编程中不可缺少的工具。在网络编程中,你永远不会提前知道数据的大小。

    例如,出于某些原因,您正在编写一个代码来提供整个路由表。您永远不知道预先有多少个路由,并且分配支持的最大值将严重阻碍您的代码。最安全的方法是声明灵活的数组成员,并对所有数据进行烹调,然后将其触发一次。

    推荐文章