error: flexible array member not at end of struct 柔性数组/可变数组

在C++之中,给定了一个结构定义和一个指向结构的指针,编译器必须能够通过指针偏移的方式访问该结构的任何成员。由于结构中每个成员的位置都取决于其前导成员的数量和类型,因此访问任何结构都需要知道所有前导成员的数量和类型。

在结构体之中,如果是数组为结构体之中最后的成员。这并不违反上述的编译规则。但是,如果flexible array member 出现在了结构体末尾以外的任何位置,则其后的任意成员的位置都将取决于数组中对应的类型的个数,所以编译器禁止将没有定义长度的数组作为结构体的中间成员。

举个栗子:

cpp 复制代码
struct S {
    int a;
    char b[];
    int c;
};

这里由于b成员的长度是不确定的,所以编译器无法通过S的指针推断出成员c的位置,所以编译报错:b不在结构体S的末尾

而我们看如下的结构体就没有编译报错的问题了:

cpp 复制代码
struct S {
    int a;
    int c;
    char d[];
};
相关推荐
蜡笔小马2 小时前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
唐梓航-求职中2 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
仟濹2 小时前
【算法打卡day3 | 2026-02-08 周日 | 算法: BFS】3_卡码网99_计数孤岛_BFS | 4_卡码网100_最大岛屿的面积DFS
算法·深度优先·宽度优先
Ll13045252982 小时前
Leetcode二叉树part4
算法·leetcode·职场和发展
Queenie_Charlie2 小时前
stars(树状数组)
数据结构·c++·树状数组
颜酱2 小时前
二叉树遍历思维实战
javascript·后端·算法
宝贝儿好2 小时前
第二章: 图像处理基本操作
算法
静听山水3 小时前
Redis核心数据结构-Set
数据结构·数据库·redis
小陈phd3 小时前
多模态大模型学习笔记(二)——机器学习十大经典算法:一张表看懂分类 / 回归 / 聚类 / 降维
学习·算法·机器学习
@––––––3 小时前
力扣hot100—系列4-贪心算法
算法·leetcode·贪心算法