variable-length-array相关内容

为什么这段代码被认为是VLA,尽管它使用的是int?

我以为我理解了VLA是什么,直到我在这里看到一个关于动态内存分配与可变长度数组之间的区别的问题。因此,我对动态内存分配没有任何问题,至少目前是这样,但我不理解的是为什么这段代码被认为是VLA: int size = 10; // or whatever int my_array [size] ; // why this is a VLA 更神秘的是,这甚至被认为是VLA const ..

是否“int size = 10;"?产生一个常量表达式?

以下代码在 gcc 4.8 和 Clang 3.2 下编译: int main(){整数大小 = 10;int arr[大小];} C++ 标准的 8.3.4/1 规定数组的大小必须是一个整数常量表达式,而 size 似乎不是.这是两个编译器中的错误,还是我遗漏了什么? 最新的 VC++ CTP 拒绝带有这个有趣消息的代码: 错误 C2466: 无法分配常量大小为 0 的数组 有趣 ..

我们可以有一个可变长度数组类型的结构元素吗?

我们可以声明一个可变长度的结构元素吗? 条件如下: typedef 结构体{uint8_t No_Of_Employees;uint8_t Employee_Names[No_Of_Employees][15];}st_employees; 解决方案 如果在 C99 中编码或 C11,您可能想要使用 灵活数组成员(您没有给出明确的维度,但你应该在头脑中在运行时有一个关于它的约定). ..
发布时间:2021-12-23 17:07:24 其他开发

在 MS Visual C++ 中启用 VLA(可变长度数组)?

如何启用 VLA、C99 中定义的可变长度数组、MS Visual C++ 或根本不可能的使用? 是的,我知道 C++ 标准基于 C89,并且 VLA 在 C89 标准中不可用,因此在 C++ 中不可用,但 MSVC++ 也应该是 C 编译器,一种可以打开的行为使用/TC 编译器参数(Compile as C Code (/TC)).但是这样做似乎并没有启用 VLA,并且编译过程在构建为 C ..
发布时间:2021-12-22 18:14:22 其他开发

未记录的 GCC 扩展:结构中的 VLA

在阅读 Clang 文档时,我发现了以下有趣的花絮:[1] clang 不支持允许在结构中使用可变长度数组的 gcc 扩展.这有几个原因:一,实现起来很棘手,二,扩展完全没有记录,三,扩展似乎很少使用.请注意,clang 确实支持灵活的数组成员(结构末尾具有零或未指定大小的数组). 这个扩展怎么用?我的理解是,在构造函数中使用 alloca 会导致堆栈指针在调用函数的末尾恢复,在这种情 ..
发布时间:2021-12-21 10:19:57 C/C++开发

C++ 是否支持变长数组?

不,等等,忍受我... VLA 一直是 GCC 的扩展,但它们被 C99 采用: [C99: 6.7.5.2/4]: 如果大小不存在,则数组类型为不完整的类型.如果大小是 * 而不是表达式,则数组类型是未指定大小的可变长度数组类型,它只能在具有函数原型作用域的声明中使用;这样的数组仍然是完整的类型.如果大小为整数常量表达式并且元素类型具有已知的常量大小,数组类型不是变长数组类型;否则, ..
发布时间:2021-12-12 14:24:31 C/C++开发

C 编译错误:“可能无法初始化可变大小的对象"

为什么我收到以下代码的错误“可变大小的对象可能无法初始化"? int boardAux[length][length] = {{0}}; 解决方案 我假设您使用的是 C99 编译器(支持动态大小的数组).您代码中的问题是,当编译器看到您的变量声明时,它无法知道数组中有多少个元素(我也在这里假设,从编译器错误中 length 不是编译时间常数). 您必须手动初始化该数组: int bo ..

如何在不知道数组大小的情况下初始化数组?

我有一种情况,我必须对输入数组应用一个条件,然后根据过滤条件返回另一个数组作为输出,该数组的大小将更小. 现在的问题是我不知道过滤结果的大小,所以我不能用特定的值初始化数组.而且我不希望它是大尺寸的 null 值,因为我使用的是 array.length;稍后的. 一种方法是首先循环原始输入数组并设置一个计数器,然后使用该计数器长度进行另一个循环并初始化并填充此数组[].但是有没有办法 ..
发布时间:2021-11-18 05:10:47 Java开发

编译器在编译时不知道大小如何分配内存?

我编写了一个 C 程序,它接受来自用户的整数输入,用作整数数组的大小,并使用该值声明给定大小的数组,我通过检查数组的大小来确认数组. 代码: #include int main(int argc, char const *argv[]){国际n;scanf("%d",&n);int k[n];printf("%ld",sizeof(k));返回0;} 令人惊讶的是它是正确的!该程序能够创 ..
发布时间:2021-11-18 04:54:59 其他开发

C++:变长数组

可变长度数组 (VLA) 如何占用内存空间? 我观察到 VLA 不占用连续的内存空间,谁能确认一下?? void func(const IplImage *imgSrc, IplImage *imgDest){uchar *data = (uchar *)imgSrc->imageData;//获取图像数据int 高度 = imgSrc-> 高度;int width = imgSrc->w ..
发布时间:2021-11-18 04:47:01 其他开发

C++14 中的可变长度数组?

n3639 提议采纳c99的variable-length-arrays 到 C++14(至少对于第一维.) 但是 我最新的能够找到列出n3639为: C++14 的第一张 CD 中的特性,随后被移除到技术规范中 这是否曾经成为技术规范,还是在交付过程中丢失了? 我的问题的原因是,我注意到了这段代码: void f(size_t n) {int a[n];for (siz ..
发布时间:2021-11-18 04:23:44 C/C++开发

结构体中可变长度的数组

我在 C 中创建了 2 个结构来表示图像(一个像素和一个图像). typedef struct pixel {无符号字符红色;无符号字符绿色;无符号炭蓝;};typedef 结构图像 {整数宽度;整数高度;结构像素像素[宽度][高度];}; 我收到一条错误消息,说图像的定义中没有定义宽度和高度.我不明白为什么会出现该错误以及如何解决它 解决方案 我会建议这样的替代方案: typede ..
发布时间:2021-11-18 03:26:59 其他开发

C 和 C++ 中的可变长度数组 (VLA)

可能的重复: 文件范围内的可变修改数组 我有一些关于 VLA 及其行为的概念,我需要澄清. 从 C99 开始的 AFIK 可以将 VLA 声明为本地范围: int main(int argc, char **argv){//函数 'main' 作用域整数大小 = 100;整数数组[大小];返回0;} 但在全局范围内是禁止的: const int global_size = 10 ..
发布时间:2021-11-18 02:58:33 C/C++开发

传递可变大小的多维数组

我试图了解将多维数组传递给 c 中的函数的“最佳实践"(或任何实践)是什么.当然,这取决于应用程序,因此让我们考虑编写一个函数来打印可变大小的二维数组.特别是,我对如何在以下代码中编写函数 printArry(__, int a, int b) 感兴趣.我省略了第一个参数,因为我不确定它应该是什么. void printArry(_____, int a, int b){/* 这里是什么?*/} ..

使用可变长度数组是否有任何开销?

使用变长数组是否有一些开销?可以在运行时通过命令行参数传递数组的大小吗?与自动和动态分配数组相比,为什么要引入它? 解决方案 VLA 确实有一些开销(与“普通"命名的编译时大小的数组相比). 首先,它具有运行时长度,但该语言为您提供了在运行时获取数组实际大小的方法(使用 sizeof).这立即意味着数组的实际大小必须存储在某处.这会导致一些微不足道的每阵列内存开销.但是,由于 VLA ..
发布时间:2021-11-18 02:06:26 其他开发

我应该信任哪个编译器?

这将是一个新手问题,但我试图用 C 语言(不是 C++)做一个小练习,我正在运行成一些问题. 假设我想在一个方法中使用一个数组,其大小取决于参数之一: void someFunc(int arSize){字符 charArray[arSize];//做东西...} 当我尝试在 Visual Studio 2013 中将其编译为 .c 文件时,我收到一条错误消息,指出不允许使用非常量数组大 ..
发布时间:2021-11-18 02:04:15 其他开发