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

什么叫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
",sizeof(struct buffer));
    return 0;
}

      
原文地址:https://www.cnblogs.com/leon1124/p/14039805.html