美文网首页嵌入式 Linux C ARM 转载部分
零长度数组在内核中的运用

零长度数组在内核中的运用

作者: Leon_Geo | 来源:发表于2019-02-13 16:17 被阅读3次

什么叫0长度数组

  • 零长度数组就是长度为零的数组,在内存空间中不占用存储位置。
  • ANSI C 标准规定定义一个数组时数组的长度必须是一个常数及数组的长度在编译的时候是确定的;
  • C99 新标准规定可以定义一个变长数组。也就是说数组的长度在编译时是未确定的在程序运行的时候才可确定甚至可以由用户指定大小。
  • 例如:
int main(void){
    int len;
    printf("intput array length:");
    scanf("%d",&len);
    int a[len];
    printf("enter your value:");
    for(int i=0; i<len;i++){
        scanf(" %d",&a[i]);
    }
}
  • GNU C标准比他们两个更绝,它支持零长度数组。你会发现除了gcc编译器,在其他编译环境下可能就编译通不过或者有警告信息。
  • 定义:TYPE array_name[0];
  • 长度:sizeof(array_name) == 0
  • 使用环境:零长度数组一般单独使用的机会很少。他常常作为结构体的最后一个成员,构成一个变长结构体,且不占用结构体内存空间,以下输出为4。
struct buffer{
    int flag;
    char str[0];
};
int main(void){
    printf("%d\n",sizeof(struct buffer));
    return 0;
}

相关文章

  • 零长度数组在内核中的运用

    什么叫0长度数组 零长度数组就是长度为零的数组,在内存空间中不占用存储位置。 ANSI C 标准规定定义一个数组时...

  • c 语言几个特殊写法

    1 零长度和变量长度数组 零长度数组GNU C 编译器允许使用零长度数组,在定义变长对象的头结构体时,这个特性非常...

  • Numpy运算与排序 (2020-04-07)

    1. 矩阵运算 2. 判断符运用 3. 常用聚合函数 函数说明sum对数组中全部或某轴向的元素。零长度的数组sum...

  • NO.32 数组的遍历与获取最值问题

    数组遍历:就是依次输出数组中的每一个元素。(运用for循环) 数组的属性:arr.length数组的长度 数组的最...

  • 写法技巧

    在if中判断数组长度不为零的正确姿势 为零 判断数组是否包含某一项 解构数组进行变量值的替换 解构时重命名简化命名...

  • golang 数组与切片

    1. 切片与数组对比 (1). 列表数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。数组的长度是数组类...

  • 零长度数组与柔性数组

    零长度数组(Zero-length array)与柔性数组(Flexible array) GNU C允许使用零长...

  • golang数组

    数组的定义 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组的长度是数组类型的...

  • js 数组

    js 中数组的长度发生改变,数组就真的发生改变,快速清空数组就让数组长度为0js 数组的方法

  • C/C++中sizeof的一点总结

    栈中的数组 对于栈中的数组,sizeof给出的会是实际的数组长度,而非指针长度。 输出: 指向数组的指针 当是一个...

网友评论

    本文标题:零长度数组在内核中的运用

    本文链接:https://www.haomeiwen.com/subject/cjbreqtx.html