问题标签 [variable-length-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
206 浏览

c++ - 如何让 VC++ 以二维数组的形式访问指针

我正在做一些图形编程,我有一个二维数组(在程序执行期间大小不同),我使用 openGL 存储。
所以当我去访问它时,我得到的只是一个返回的void指针

为了使逻辑更容易,我希望编译器假装它是,并将其用作 2D 数组(因为arr[i][j]比 更简洁且不易出错ptr[i * y + j])。


我发现这种巧妙的铸造方法在 GCC 中运行良好(在 uni 的 linux 机器上):

这基本上将内存指针块 openGL 给我一个tess X tess二维数组,并创建该类型的引用来指向它。
这使我可以像访问内存一样vertices[i][j]
Vertex只是一个包含s的typedefedstructfloat

但是,在我的 Windows 机器上,VS'12 非常适合,抱怨它需要tess写入的整数constant(特别是; error C2057: expected constant expression)。
我不知道为什么。

现在,我知道VS 不支持 VLA,但我没有在这里创建一个数组,我正在创建一个我不知道“直到运行时”大小的东西的引用。
所以它不应该关心函数调用之间的大小是否发生变化,对吧?为什么不允许这样做?


不要被吓倒我尝试使用std::array

除了很明显,references must be initialized这个测试对我没有帮助,因为它仍然抱怨expression must have a constant value特别是;error C2975: '_Size' : invalid template argument for 'std::array', expected compile-time constant expression


我对在这里尝试什么感到茫然,我为reinterpret_cast它以及它使事情变得多么简单而感到自豪,并且确信我没有使用违反标准的方法。
我不想std::vector从指针创建一个,然后在完成后将该动态数组中的数据复制回指针位置;当内存块已经坐在那里时,这似乎效率很低!
没有办法围绕预先存在的内存块创建向量,是吗?..不,这听起来很傻。

我想看看这是否可以在不放弃的情况下完成并将其用作Vertex*;想法?
有人可以告诉我为什么它不能在 VS 中工作吗?
我可以做些什么来让它工作(VS的扩展/更新)?
VS'13 是否添加了对此的支持?

我也收到了C2087: 'vertices' : missing subscript我无法解释的错误。
除了这些似乎表明 VS 迫切希望tess保持不变的其他错误:
error C2466: cannot allocate an array of constant size 0
error C2540: non-constant expression as array bound
error C2440: 'initializing' : cannot convert from 'Vertex [1][1]' to 'Vertex (&)[][1]'

0 投票
1 回答
72 浏览

c++ - 传递定义二维数组元素大小的变量

我正在处理 C++ 中的一些数组传递。如果我用数字定义数组,则以下工作,例如:

但是,我不能调用我发送变量作为我的大小参数的方法。我意识到我可能需要将它们作为指针或通过引用传递。我在别处读过使用unsigned int,没有用。我尝试了一些变体,但我正在为整个概念而苦苦挣扎。任何提示/建议将不胜感激!

0 投票
1 回答
809 浏览

c - Visual Studio 2013 不会编译 C 数组声明

我已阅读有关此问题的多篇文章,但无法解决我的问题。我有一个扩展名为 .c 的文件,可以在 gcc 上完美编译。我已确保在项目属性中将其设置为编译为 C 代码。尽管如此,当我尝试编译时,它还是失败了,因为它不允许我这样声明一个数组:

这向我表明它正在尝试将我的代码编译为 C++(尽管我可能错了)。

我能做些什么来解决这个问题?

0 投票
3 回答
8028 浏览

c - 结构中的可变长度数组

我创建了 2 个结构来表示 C 中的图像(一个像素和一个图像)。

我收到一条错误消息,说图像定义中未定义宽度和高度。我不明白为什么会出现该错误以及如何解决它

0 投票
2 回答
940 浏览

matlab - 如何存储变长数组?

我想存储一个在 for 循环的每次迭代中改变其大小的数组。例如,

“ans”是一个行向量,它在 y 的每次迭代中改变其大小。

如何将这些可变长度“ans”存储到 ms 中?

当我尝试将“ms”初始化为单元格时,它会显示一条错误消息,提示“无法从 double 转换为单元格”。

我有什么方法可以解决这个问题?

谢谢亲切的问候

0 投票
4 回答
3872 浏览

c++ - 通过引用将未知数组传递给函数(C++)

0 投票
1 回答
130 浏览

c++ - C++ 运行时数组的长度

我被要求证明可以在程序中设置数组长度,并且不需要在编译时确定。我有以下代码:

但是当我编译时,我得到以下错误:

我不确定处理它的正确方法是什么。

0 投票
3 回答
17250 浏览

c - Dynamic array allocation on stack in C

I just did a experiment yesterday, and find something confusing:

The number j is read from keyboard and it’s used to allocate the array arr on the stack.

The compiler does not even know the size of the array at compile time (initializes j to 0?), but there is no compilation error. How is it possible?

0 投票
1 回答
195 浏览

c - Segfaults on initialization of array of pthread_t

I have a program that takes input n from the command line, and, as part of its operation, tries to call the following code:

Now, for any n <= 1023, this works fine, but the moment I try to use n > 1023, I get a segfault. It is this particular line that causes it - my code does not advance beyond it. I'm a little confused as to why this is happening, and would appreciate all possible help.

0 投票
1 回答
509 浏览

c++ - 用大括号初始化 VLA 是 GCC 错误还是扩展?

记住以下代码:

GCC 在 C99 模式下正确出错,error: variable-sized object may not be initialized而 clang 在 C++ 模式下给出相同的错误。但是在 C++ 模式下,GCC 不会抱怨。这会让我相信这可能是他们的C 扩展 VLA 页面上没有记录的扩展。我也找不到匹配的错误报告。任何人都可以验证这是否是扩展或是否存在现有错误报告?